riffer-rig 0.12.0 → 0.14.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 +146 -0
- data/README.md +29 -23
- data/lib/riffer/rig/acp/host.rb +67 -24
- data/lib/riffer/rig/acp/mapper.rb +242 -0
- data/lib/riffer/rig/acp.rb +125 -122
- data/lib/riffer/rig/bundled/bash.rb +5 -1
- data/lib/riffer/rig/cli/flags.rb +59 -32
- data/lib/riffer/rig/cli/sessions.rb +52 -29
- data/lib/riffer/rig/cli.rb +24 -13
- data/lib/riffer/rig/command/context.rb +1 -1
- data/lib/riffer/rig/command.rb +4 -2
- data/lib/riffer/rig/commands/auth.rb +23 -23
- data/lib/riffer/rig/commands/cost.rb +59 -0
- data/lib/riffer/rig/commands/model.rb +24 -18
- data/lib/riffer/rig/commands/reasoning.rb +46 -0
- data/lib/riffer/rig/commands/reload.rb +1 -1
- data/lib/riffer/rig/commands/skill.rb +1 -1
- data/lib/riffer/rig/commands/trace/replay.rb +88 -0
- data/lib/riffer/rig/commands/trace.rb +25 -0
- data/lib/riffer/rig/credentials/provider_fields.rb +47 -0
- data/lib/riffer/rig/credentials.rb +94 -48
- data/lib/riffer/rig/env.rb +4 -2
- data/lib/riffer/rig/events/after_response.rb +4 -11
- data/lib/riffer/rig/events/after_tool_call.rb +15 -13
- data/lib/riffer/rig/events/before_prompt.rb +4 -11
- data/lib/riffer/rig/events/before_request.rb +4 -11
- data/lib/riffer/rig/events/before_tool_call.rb +12 -13
- data/lib/riffer/rig/events/command_output.rb +4 -11
- data/lib/riffer/rig/events/job_exit.rb +28 -0
- data/lib/riffer/rig/events/notify.rb +4 -11
- data/lib/riffer/rig/events/session_end.rb +4 -11
- data/lib/riffer/rig/events/session_start.rb +4 -11
- data/lib/riffer/rig/events/skill_activated.rb +4 -11
- data/lib/riffer/rig/events/turn_end.rb +4 -11
- data/lib/riffer/rig/extension.rb +5 -4
- data/lib/riffer/rig/headless/host.rb +2 -14
- data/lib/riffer/rig/headless/ndjson.rb +1 -1
- data/lib/riffer/rig/headless.rb +122 -26
- data/lib/riffer/rig/hosts/mirror.rb +8 -5
- data/lib/riffer/rig/hosts/non_interactive.rb +24 -0
- data/lib/riffer/rig/hosts/null.rb +2 -21
- data/lib/riffer/rig/loader/credentials.rb +23 -0
- data/lib/riffer/rig/loader/extension_source.rb +177 -0
- data/lib/riffer/rig/loader/options.rb +39 -0
- data/lib/riffer/rig/loader.rb +148 -327
- data/lib/riffer/rig/mcp/auth.rb +3 -1
- data/lib/riffer/rig/mcp/declaration.rb +1 -1
- data/lib/riffer/rig/provider_setup.rb +2 -2
- data/lib/riffer/rig/providers.rb +5 -0
- data/lib/riffer/rig/registrar.rb +4 -2
- data/lib/riffer/rig/runtime/abort.rb +66 -0
- data/lib/riffer/rig/runtime/concurrency.rb +71 -0
- data/lib/riffer/rig/runtime/error_message.rb +27 -0
- data/lib/riffer/rig/runtime/hooks.rb +6 -2
- data/lib/riffer/rig/runtime/job_completion.rb +31 -0
- data/lib/riffer/rig/runtime/job_envelope.rb +36 -0
- data/lib/riffer/rig/runtime/job_inbox.rb +74 -0
- data/lib/riffer/rig/runtime/job_notification.rb +31 -0
- data/lib/riffer/rig/runtime/mcp_registrar.rb +91 -0
- data/lib/riffer/rig/runtime/request_guardrail.rb +1 -1
- data/lib/riffer/rig/runtime/snapshot.rb +84 -0
- data/lib/riffer/rig/runtime/system_prompt.rb +56 -0
- data/lib/riffer/rig/runtime/tool_runtime.rb +47 -7
- data/lib/riffer/rig/runtime/usage.rb +19 -0
- data/lib/riffer/rig/runtime.rb +368 -250
- data/lib/riffer/rig/sdk.rb +29 -7
- data/lib/riffer/rig/settings/document.rb +5 -5
- data/lib/riffer/rig/settings/file.rb +34 -0
- data/lib/riffer/rig/settings/model_options.rb +44 -0
- data/lib/riffer/rig/settings.rb +4 -130
- data/lib/riffer/rig/stores/entries.rb +26 -0
- data/lib/riffer/rig/stores/header.rb +3 -17
- data/lib/riffer/rig/stores/jsonl.rb +8 -6
- data/lib/riffer/rig/stores/message_entry.rb +10 -10
- data/lib/riffer/rig/stores/model_entry.rb +10 -10
- data/lib/riffer/rig/stores/reasoning_entry.rb +31 -0
- data/lib/riffer/rig/stores/recorder.rb +45 -17
- data/lib/riffer/rig/stores/skill_entry.rb +10 -10
- data/lib/riffer/rig/stores/stamped.rb +9 -0
- data/lib/riffer/rig/stores/timestamp.rb +23 -0
- data/lib/riffer/rig/support/json_file.rb +53 -0
- data/lib/riffer/rig/support/typed_value/schema.rb +16 -0
- data/lib/riffer/rig/support/typed_value.rb +17 -0
- data/lib/riffer/rig/terminal/autocomplete.rb +133 -0
- data/lib/riffer/rig/terminal/banner.rb +48 -11
- data/lib/riffer/rig/terminal/blocking_prompter.rb +37 -0
- data/lib/riffer/rig/terminal/builtin.rb +16 -0
- data/lib/riffer/rig/terminal/columns.rb +63 -0
- data/lib/riffer/rig/terminal/console.rb +61 -0
- data/lib/riffer/rig/terminal/count.rb +14 -0
- data/lib/riffer/rig/terminal/echo.rb +26 -0
- data/lib/riffer/rig/terminal/frame.rb +464 -0
- data/lib/riffer/rig/terminal/frame_prompter.rb +65 -0
- data/lib/riffer/rig/terminal/help.rb +41 -0
- data/lib/riffer/rig/terminal/host.rb +7 -28
- data/lib/riffer/rig/terminal/idle_ticker.rb +28 -0
- data/lib/riffer/rig/terminal/job_counter.rb +33 -0
- data/lib/riffer/rig/terminal/job_exit_notice.rb +11 -0
- data/lib/riffer/rig/terminal/key.rb +38 -0
- data/lib/riffer/rig/terminal/key_decoder.rb +283 -0
- data/lib/riffer/rig/terminal/key_pipeline.rb +119 -0
- data/lib/riffer/rig/terminal/line_editor.rb +191 -0
- data/lib/riffer/rig/terminal/loading.rb +71 -0
- data/lib/riffer/rig/terminal/markdown/blocks.rb +96 -0
- data/lib/riffer/rig/terminal/markdown/flow.rb +77 -0
- data/lib/riffer/rig/terminal/markdown/inline.rb +85 -0
- data/lib/riffer/rig/terminal/markdown/span.rb +25 -0
- data/lib/riffer/rig/terminal/markdown/table.rb +166 -0
- data/lib/riffer/rig/terminal/markdown.rb +187 -0
- data/lib/riffer/rig/terminal/message_queue/message.rb +13 -0
- data/lib/riffer/rig/terminal/message_queue.rb +27 -0
- data/lib/riffer/rig/terminal/opening.rb +50 -0
- data/lib/riffer/rig/terminal/peek.rb +74 -0
- data/lib/riffer/rig/terminal/picker.rb +47 -22
- data/lib/riffer/rig/terminal/question.rb +37 -0
- data/lib/riffer/rig/terminal/quiet_display.rb +48 -0
- data/lib/riffer/rig/terminal/renderer.rb +19 -250
- data/lib/riffer/rig/terminal/repl.rb +250 -0
- data/lib/riffer/rig/terminal/replay/turn.rb +23 -0
- data/lib/riffer/rig/terminal/replay.rb +76 -0
- data/lib/riffer/rig/terminal/session.rb +2 -6
- data/lib/riffer/rig/terminal/spinner.rb +13 -0
- data/lib/riffer/rig/terminal/status_bar.rb +126 -0
- data/lib/riffer/rig/terminal/tally.rb +12 -0
- data/lib/riffer/rig/terminal/theme.rb +34 -1
- data/lib/riffer/rig/terminal/ticker.rb +109 -0
- data/lib/riffer/rig/terminal/ticker_display.rb +87 -0
- data/lib/riffer/rig/terminal/turn_buffer/stats.rb +19 -0
- data/lib/riffer/rig/terminal/turn_buffer.rb +133 -0
- data/lib/riffer/rig/terminal/turn_report.rb +100 -0
- data/lib/riffer/rig/terminal/wrapper.rb +59 -63
- data/lib/riffer/rig/terminal.rb +237 -110
- data/lib/riffer/rig/tools/bash/capture.rb +58 -0
- data/lib/riffer/rig/tools/bash/job.rb +84 -0
- data/lib/riffer/rig/tools/bash/job_log.rb +117 -0
- data/lib/riffer/rig/tools/bash/jobs.rb +197 -0
- data/lib/riffer/rig/tools/bash/kill.rb +24 -0
- data/lib/riffer/rig/tools/bash/kill_group.rb +15 -0
- data/lib/riffer/rig/tools/bash/monotonic_clock.rb +8 -0
- data/lib/riffer/rig/tools/bash/output.rb +30 -0
- data/lib/riffer/rig/tools/bash/truncation.rb +12 -0
- data/lib/riffer/rig/tools/bash.rb +49 -29
- data/lib/riffer/rig/tools/read.rb +2 -2
- data/lib/riffer/rig/trust.rb +9 -18
- data/lib/riffer/rig/version.rb +1 -1
- data/sig/generated/riffer/rig/acp/host.rbs +29 -8
- data/sig/generated/riffer/rig/acp/mapper.rbs +108 -0
- data/sig/generated/riffer/rig/acp.rbs +46 -53
- data/sig/generated/riffer/rig/cli/flags.rbs +20 -18
- data/sig/generated/riffer/rig/cli/sessions.rbs +25 -11
- data/sig/generated/riffer/rig/cli.rbs +6 -3
- data/sig/generated/riffer/rig/command.rbs +5 -3
- data/sig/generated/riffer/rig/commands/auth.rbs +3 -7
- data/sig/generated/riffer/rig/commands/cost.rbs +31 -0
- data/sig/generated/riffer/rig/commands/model.rbs +2 -0
- data/sig/generated/riffer/rig/commands/reasoning.rbs +16 -0
- data/sig/generated/riffer/rig/commands/trace/replay.rbs +53 -0
- data/sig/generated/riffer/rig/commands/trace.rbs +14 -0
- data/sig/generated/riffer/rig/credentials/provider_fields.rbs +26 -0
- data/sig/generated/riffer/rig/credentials.rbs +36 -15
- data/sig/generated/riffer/rig/env.rbs +3 -1
- data/sig/generated/riffer/rig/events/after_response.rbs +3 -7
- data/sig/generated/riffer/rig/events/after_tool_call.rbs +14 -9
- data/sig/generated/riffer/rig/events/before_prompt.rbs +3 -7
- data/sig/generated/riffer/rig/events/before_request.rbs +3 -7
- data/sig/generated/riffer/rig/events/before_tool_call.rbs +11 -9
- data/sig/generated/riffer/rig/events/command_output.rbs +3 -7
- data/sig/generated/riffer/rig/events/job_exit.rbs +24 -0
- data/sig/generated/riffer/rig/events/notify.rbs +3 -7
- data/sig/generated/riffer/rig/events/session_end.rbs +3 -7
- data/sig/generated/riffer/rig/events/session_start.rbs +3 -7
- data/sig/generated/riffer/rig/events/skill_activated.rbs +3 -7
- data/sig/generated/riffer/rig/events/turn_end.rbs +3 -7
- data/sig/generated/riffer/rig/extension.rbs +3 -3
- data/sig/generated/riffer/rig/headless/host.rbs +2 -10
- data/sig/generated/riffer/rig/headless.rbs +41 -10
- data/sig/generated/riffer/rig/hosts/mirror.rbs +7 -6
- data/sig/generated/riffer/rig/hosts/non_interactive.rbs +18 -0
- data/sig/generated/riffer/rig/hosts/null.rbs +2 -15
- data/sig/generated/riffer/rig/loader/credentials.rbs +12 -0
- data/sig/generated/riffer/rig/loader/extension_source.rbs +89 -0
- data/sig/generated/riffer/rig/loader/options.rbs +28 -0
- data/sig/generated/riffer/rig/loader.rbs +57 -133
- data/sig/generated/riffer/rig/provider_setup.rbs +1 -1
- data/sig/generated/riffer/rig/providers.rbs +3 -0
- data/sig/generated/riffer/rig/runtime/abort.rbs +36 -0
- data/sig/generated/riffer/rig/runtime/concurrency.rbs +41 -0
- data/sig/generated/riffer/rig/runtime/error_message.rbs +13 -0
- data/sig/generated/riffer/rig/runtime/hooks.rbs +3 -1
- data/sig/generated/riffer/rig/runtime/job_completion.rbs +28 -0
- data/sig/generated/riffer/rig/runtime/job_envelope.rbs +17 -0
- data/sig/generated/riffer/rig/runtime/job_inbox.rbs +40 -0
- data/sig/generated/riffer/rig/runtime/job_notification.rbs +22 -0
- data/sig/generated/riffer/rig/runtime/mcp_registrar.rbs +46 -0
- data/sig/generated/riffer/rig/runtime/snapshot.rbs +45 -0
- data/sig/generated/riffer/rig/runtime/system_prompt.rbs +37 -0
- data/sig/generated/riffer/rig/runtime/tool_runtime.rbs +25 -1
- data/sig/generated/riffer/rig/runtime/usage.rbs +11 -0
- data/sig/generated/riffer/rig/runtime.rbs +150 -96
- data/sig/generated/riffer/rig/sdk.rbs +11 -1
- data/sig/generated/riffer/rig/settings/document.rbs +2 -2
- data/sig/generated/riffer/rig/settings/file.rbs +24 -0
- data/sig/generated/riffer/rig/settings/model_options.rbs +25 -0
- data/sig/generated/riffer/rig/settings.rbs +0 -66
- data/sig/generated/riffer/rig/stores/entries.rbs +12 -0
- data/sig/generated/riffer/rig/stores/header.rbs +2 -5
- data/sig/generated/riffer/rig/stores/message_entry.rbs +9 -7
- data/sig/generated/riffer/rig/stores/model_entry.rbs +9 -7
- data/sig/generated/riffer/rig/stores/reasoning_entry.rbs +23 -0
- data/sig/generated/riffer/rig/stores/recorder.rbs +24 -8
- data/sig/generated/riffer/rig/stores/skill_entry.rbs +9 -7
- data/sig/generated/riffer/rig/stores/stamped.rbs +7 -0
- data/sig/generated/riffer/rig/stores/timestamp.rbs +13 -0
- data/sig/generated/riffer/rig/support/json_file.rbs +23 -0
- data/sig/generated/riffer/rig/support/typed_value/schema.rbs +14 -0
- data/sig/generated/riffer/rig/support/typed_value.rbs +13 -0
- data/sig/generated/riffer/rig/terminal/autocomplete.rbs +72 -0
- data/sig/generated/riffer/rig/terminal/banner.rbs +25 -4
- data/sig/generated/riffer/rig/terminal/blocking_prompter.rbs +23 -0
- data/sig/generated/riffer/rig/terminal/builtin.rbs +13 -0
- data/sig/generated/riffer/rig/terminal/columns.rbs +43 -0
- data/sig/generated/riffer/rig/terminal/console.rbs +38 -0
- data/sig/generated/riffer/rig/terminal/count.rbs +7 -0
- data/sig/generated/riffer/rig/terminal/echo.rbs +15 -0
- data/sig/generated/riffer/rig/terminal/frame.rbs +232 -0
- data/sig/generated/riffer/rig/terminal/frame_prompter.rbs +34 -0
- data/sig/generated/riffer/rig/terminal/help.rbs +22 -0
- data/sig/generated/riffer/rig/terminal/host.rbs +5 -11
- data/sig/generated/riffer/rig/terminal/idle_ticker.rbs +21 -0
- data/sig/generated/riffer/rig/terminal/job_counter.rbs +21 -0
- data/sig/generated/riffer/rig/terminal/job_exit_notice.rbs +7 -0
- data/sig/generated/riffer/rig/terminal/key.rbs +27 -0
- data/sig/generated/riffer/rig/terminal/key_decoder.rbs +110 -0
- data/sig/generated/riffer/rig/terminal/key_pipeline.rbs +60 -0
- data/sig/generated/riffer/rig/terminal/line_editor.rbs +111 -0
- data/sig/generated/riffer/rig/terminal/loading.rbs +42 -0
- data/sig/generated/riffer/rig/terminal/markdown/blocks.rbs +57 -0
- data/sig/generated/riffer/rig/terminal/markdown/flow.rbs +42 -0
- data/sig/generated/riffer/rig/terminal/markdown/inline.rbs +41 -0
- data/sig/generated/riffer/rig/terminal/markdown/span.rbs +20 -0
- data/sig/generated/riffer/rig/terminal/markdown/table.rbs +101 -0
- data/sig/generated/riffer/rig/terminal/markdown.rbs +112 -0
- data/sig/generated/riffer/rig/terminal/message_queue/message.rbs +10 -0
- data/sig/generated/riffer/rig/terminal/message_queue.rbs +17 -0
- data/sig/generated/riffer/rig/terminal/opening.rbs +33 -0
- data/sig/generated/riffer/rig/terminal/peek.rbs +37 -0
- data/sig/generated/riffer/rig/terminal/picker.rbs +21 -5
- data/sig/generated/riffer/rig/terminal/question.rbs +21 -0
- data/sig/generated/riffer/rig/terminal/quiet_display.rbs +33 -0
- data/sig/generated/riffer/rig/terminal/renderer.rbs +10 -122
- data/sig/generated/riffer/rig/terminal/repl.rbs +118 -0
- data/sig/generated/riffer/rig/terminal/replay/turn.rbs +20 -0
- data/sig/generated/riffer/rig/terminal/replay.rbs +29 -0
- data/sig/generated/riffer/rig/terminal/session.rbs +2 -7
- data/sig/generated/riffer/rig/terminal/spinner.rbs +9 -0
- data/sig/generated/riffer/rig/terminal/status_bar.rbs +88 -0
- data/sig/generated/riffer/rig/terminal/tally.rbs +7 -0
- data/sig/generated/riffer/rig/terminal/theme.rbs +23 -2
- data/sig/generated/riffer/rig/terminal/ticker.rbs +61 -0
- data/sig/generated/riffer/rig/terminal/ticker_display.rbs +45 -0
- data/sig/generated/riffer/rig/terminal/turn_buffer/stats.rbs +16 -0
- data/sig/generated/riffer/rig/terminal/turn_buffer.rbs +67 -0
- data/sig/generated/riffer/rig/terminal/turn_report.rbs +52 -0
- data/sig/generated/riffer/rig/terminal/wrapper.rbs +23 -14
- data/sig/generated/riffer/rig/terminal.rbs +78 -26
- data/sig/generated/riffer/rig/tools/bash/capture.rbs +39 -0
- data/sig/generated/riffer/rig/tools/bash/job.rbs +65 -0
- data/sig/generated/riffer/rig/tools/bash/job_log.rbs +60 -0
- data/sig/generated/riffer/rig/tools/bash/jobs.rbs +86 -0
- data/sig/generated/riffer/rig/tools/bash/kill.rbs +8 -0
- data/sig/generated/riffer/rig/tools/bash/kill_group.rbs +7 -0
- data/sig/generated/riffer/rig/tools/bash/monotonic_clock.rbs +6 -0
- data/sig/generated/riffer/rig/tools/bash/output.rbs +10 -0
- data/sig/generated/riffer/rig/tools/bash/truncation.rbs +7 -0
- data/sig/generated/riffer/rig/tools/bash.rbs +15 -13
- data/sig/generated/riffer/rig/trust.rbs +7 -8
- data/sig/manual/riffer/rig/acp/mapper.rbs +6 -0
- data/sig/manual/riffer/rig/commands/cost.rbs +6 -0
- data/sig/manual/riffer/rig/commands/reasoning.rbs +6 -0
- data/sig/manual/riffer/rig/commands/trace/replay.rbs +6 -0
- data/sig/manual/riffer/rig/commands/trace.rbs +6 -0
- data/sig/manual/riffer/rig/credentials/provider_fields.rbs +6 -0
- data/sig/manual/riffer/rig/hosts.rbs +1 -1
- data/sig/manual/riffer/rig/loader/credentials.rbs +6 -0
- data/sig/manual/riffer/rig/runtime/error_message.rbs +6 -0
- data/sig/manual/riffer/rig/runtime/job_envelope.rbs +6 -0
- data/sig/manual/riffer/rig/runtime/usage.rbs +6 -0
- data/sig/manual/riffer/rig/sdk.rbs +1 -1
- data/sig/manual/riffer/rig/settings/file.rbs +6 -0
- data/sig/manual/riffer/rig/settings/model_options.rbs +6 -0
- data/sig/manual/riffer/rig/stores/entries.rbs +6 -0
- data/sig/manual/riffer/rig/stores/timestamp.rbs +6 -0
- data/sig/manual/riffer/rig/stores.rbs +10 -2
- data/sig/manual/riffer/rig/support/json_file.rbs +6 -0
- data/sig/manual/riffer/rig/support.rbs +10 -0
- data/sig/manual/riffer/rig/terminal/autocomplete.rbs +8 -0
- data/sig/manual/riffer/rig/terminal/columns.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/count.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/echo.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/help.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/job_exit_notice.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/markdown/blocks.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/markdown/flow.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/markdown/inline.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/markdown/table.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/markdown.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/question.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/replay.rbs +14 -0
- data/sig/manual/riffer/rig/terminal/spinner.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/status_bar.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/tally.rbs +6 -0
- data/sig/manual/riffer/rig/terminal/turn_report.rbs +14 -0
- data/sig/manual/riffer/rig/terminal.rbs +29 -4
- metadata +199 -13
- data/lib/riffer/rig/settings/pricing.rb +0 -40
- data/lib/riffer/rig/terminal/animator.rb +0 -139
- data/lib/riffer/rig/terminal/cursor.rb +0 -44
- data/lib/riffer/rig/terminal/smoother.rb +0 -126
- data/sig/generated/riffer/rig/settings/pricing.rbs +0 -31
- data/sig/generated/riffer/rig/terminal/animator.rbs +0 -68
- data/sig/generated/riffer/rig/terminal/cursor.rbs +0 -31
- data/sig/generated/riffer/rig/terminal/smoother.rbs +0 -59
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 613c884d96e252c8793e442b39cf843d5c91438fc7d6ae6bc963536cb978de09
|
|
4
|
+
data.tar.gz: f4e2596e6c67e87f19011afa452c207f5f6e8b0394673c58e1ae22a57e2f2269
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1d1b670b735b7d06b7b88d38c305e09018db879ca5ffe1a65a89f1424ae25b9d324b234bb3d38e89889305f85cb1f97822d2a76fba083f83e76f256cec6de331
|
|
7
|
+
data.tar.gz: 77c745faeb40661a33801885cee13d7811b05c9e557e5798a5ebb6233aef18e7c74e194f4fc9b4347cac4ff0b8182ca8c42b2e70fda71a051ee13849dbdea8f3
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,151 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.14.0](https://github.com/bottrall/riffer-rig/compare/v0.13.0...v0.14.0) (2026-10-18)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **headless:** print the session id on stderr ([#556](https://github.com/bottrall/riffer-rig/issues/556)) ([2816938](https://github.com/bottrall/riffer-rig/commit/2816938f66d32ccf557d83a33e40300e68a68032))
|
|
9
|
+
* make reasoning effort configurable like the model ([#553](https://github.com/bottrall/riffer-rig/issues/553)) ([330f190](https://github.com/bottrall/riffer-rig/commit/330f190244353ed5e967b0f29d574c2741d92dba))
|
|
10
|
+
* **terminal:** keep the status bar filled between turns ([#555](https://github.com/bottrall/riffer-rig/issues/555)) ([e0918ec](https://github.com/bottrall/riffer-rig/commit/e0918ecd050519cf06d0593221b3b50e0e1a6778))
|
|
11
|
+
* **terminal:** type a multiline prompt ([#557](https://github.com/bottrall/riffer-rig/issues/557)) ([a55091c](https://github.com/bottrall/riffer-rig/commit/a55091c091e4df4ad6c63a71d7dd16d1de98e835))
|
|
12
|
+
* upgrade riffer to 0.53.0 and adopt the model catalog ([#552](https://github.com/bottrall/riffer-rig/issues/552)) ([70b129b](https://github.com/bottrall/riffer-rig/commit/70b129b27a4d03188ef7831937874d7bb73cea08))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* stop models from polling background bash jobs ([#559](https://github.com/bottrall/riffer-rig/issues/559)) ([57ad0ba](https://github.com/bottrall/riffer-rig/commit/57ad0ba259d0ebd71f4cc4178172364f39a62782))
|
|
18
|
+
* **terminal:** draw the banner and the input row together ([#549](https://github.com/bottrall/riffer-rig/issues/549)) ([e847277](https://github.com/bottrall/riffer-rig/commit/e847277af41ebd824dd115105d7d40e9af236da4))
|
|
19
|
+
|
|
20
|
+
## [0.13.0](https://github.com/bottrall/riffer-rig/compare/v0.12.0...v0.13.0) (2026-10-17)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### ⚠ BREAKING CHANGES
|
|
24
|
+
|
|
25
|
+
* Riffer::Rig::Loader takes its per-build choices as a Riffer::Rig::Loader::Options instead of keywords. Loader.runtime no longer accepts model:, extensions:, skills:, agents_md:, tools: or max_steps: (ArgumentError: unknown keywords); pass options: Riffer::Rig::Loader::Options.new(model: ..., skills: false). On a Loader instance the Options is the optional first positional argument: runtime(options), continue(options) and resume(id, options). Loader#tracked_files is removed with no replacement.
|
|
26
|
+
|
|
27
|
+
### Features
|
|
28
|
+
|
|
29
|
+
* **acp:** add adopt: hook and yield the connection from run ([#336](https://github.com/bottrall/riffer-rig/issues/336)) ([612a9c4](https://github.com/bottrall/riffer-rig/commit/612a9c4710f41ab19140d91112887e833c40ce4d)), closes [#302](https://github.com/bottrall/riffer-rig/issues/302)
|
|
30
|
+
* **acp:** announce background job exits between prompts ([#437](https://github.com/bottrall/riffer-rig/issues/437)) ([cd40e5b](https://github.com/bottrall/riffer-rig/commit/cd40e5b1778a72595b4c2f4a376544052c5c1a3d)), closes [#334](https://github.com/bottrall/riffer-rig/issues/334)
|
|
31
|
+
* **acp:** relay host questions to the client ([#337](https://github.com/bottrall/riffer-rig/issues/337)) ([e4fe093](https://github.com/bottrall/riffer-rig/commit/e4fe093505c74f89b7a8fc93680425b95c59e663))
|
|
32
|
+
* carry the tool lifecycle on before/after_tool_call events ([#321](https://github.com/bottrall/riffer-rig/issues/321)) ([c3967e2](https://github.com/bottrall/riffer-rig/commit/c3967e224b2d7427f6fd54e028b47f9644e24375))
|
|
33
|
+
* **commands:** add /cost runtime command ([#431](https://github.com/bottrall/riffer-rig/issues/431)) ([f7f36e8](https://github.com/bottrall/riffer-rig/commit/f7f36e8e91038952ca3a6762d792e0aea8ed67e6)), closes [#260](https://github.com/bottrall/riffer-rig/issues/260)
|
|
34
|
+
* **commands:** add /trace runtime command ([#373](https://github.com/bottrall/riffer-rig/issues/373)) ([95fc4cc](https://github.com/bottrall/riffer-rig/commit/95fc4cca0ab07cc7d1d39d726875e21eaa184fbb)), closes [#250](https://github.com/bottrall/riffer-rig/issues/250)
|
|
35
|
+
* **deps:** upgrade riffer to 0.51.0 ([#306](https://github.com/bottrall/riffer-rig/issues/306)) ([255c3d7](https://github.com/bottrall/riffer-rig/commit/255c3d7474baf3e669b5b093eb492984e3235cbd))
|
|
36
|
+
* **deps:** upgrade riffer to 0.52.1 ([#418](https://github.com/bottrall/riffer-rig/issues/418)) ([7b9c085](https://github.com/bottrall/riffer-rig/commit/7b9c085de9c3ea5d7fc6a5b3c3d4c9b3b6e1825b))
|
|
37
|
+
* **headless:** wait for background jobs at exit ([#438](https://github.com/bottrall/riffer-rig/issues/438)) ([91c7f9f](https://github.com/bottrall/riffer-rig/commit/91c7f9fc09fa6ea0a95c3e0221978979a1ff90f1)), closes [#331](https://github.com/bottrall/riffer-rig/issues/331)
|
|
38
|
+
* **runtime:** deliver background job exits to the model ([#434](https://github.com/bottrall/riffer-rig/issues/434)) ([e3f87b3](https://github.com/bottrall/riffer-rig/commit/e3f87b3a8d8efbe9a1f380b161b80f00bb89da00))
|
|
39
|
+
* **runtime:** keep background jobs running through a cancel ([#436](https://github.com/bottrall/riffer-rig/issues/436)) ([699ebbc](https://github.com/bottrall/riffer-rig/commit/699ebbc9055f11b95e7446a94ed33895387d8661)), closes [#333](https://github.com/bottrall/riffer-rig/issues/333)
|
|
40
|
+
* **stores:** stamp session entries with recorded_at ([#316](https://github.com/bottrall/riffer-rig/issues/316)) ([44dd322](https://github.com/bottrall/riffer-rig/commit/44dd3221b6a6c34528fb17772f15b2449a4ebdfc))
|
|
41
|
+
* **terminal:** add a /help command that lists the session's commands ([#547](https://github.com/bottrall/riffer-rig/issues/547)) ([81acfcf](https://github.com/bottrall/riffer-rig/commit/81acfcf7946033ecc0bebcf886db32b5b2a81e72)), closes [#545](https://github.com/bottrall/riffer-rig/issues/545)
|
|
42
|
+
* **terminal:** add the message queue and its footer chip ([#410](https://github.com/bottrall/riffer-rig/issues/410)) ([9a4c41a](https://github.com/bottrall/riffer-rig/commit/9a4c41a630fdabf4edaf90434ed4cc1c441ecbbb)), closes [#243](https://github.com/bottrall/riffer-rig/issues/243)
|
|
43
|
+
* **terminal:** make the ticker UI the default and document it ([#435](https://github.com/bottrall/riffer-rig/issues/435)) ([3400949](https://github.com/bottrall/riffer-rig/commit/34009492060bec9f36be554ffcebac770b247d4a)), closes [#265](https://github.com/bottrall/riffer-rig/issues/265)
|
|
44
|
+
* **terminal:** replay prior turns on resume ([#432](https://github.com/bottrall/riffer-rig/issues/432)) ([7652083](https://github.com/bottrall/riffer-rig/commit/765208399a1c3a69791ba85bb9a97dc2914206ed)), closes [#262](https://github.com/bottrall/riffer-rig/issues/262)
|
|
45
|
+
* **terminal:** run the REPL as a queue-draining loop ([#429](https://github.com/bottrall/riffer-rig/issues/429)) ([0213860](https://github.com/bottrall/riffer-rig/commit/021386049d753b48226cc6dbb8a63312d03dacdf))
|
|
46
|
+
* **terminal:** show session totals in the banner and redraw on /model ([#317](https://github.com/bottrall/riffer-rig/issues/317)) ([69232fd](https://github.com/bottrall/riffer-rig/commit/69232fde93179869cce86b66bcc6aa0da9dfa731)), closes [#264](https://github.com/bottrall/riffer-rig/issues/264)
|
|
47
|
+
* **terminal:** show turns through the ticker and delete the old renderer ([#433](https://github.com/bottrall/riffer-rig/issues/433)) ([4ec3388](https://github.com/bottrall/riffer-rig/commit/4ec3388df41a01d34b9fa9686df7f63ba0b42062))
|
|
48
|
+
* **terminal:** start a turn when a background job exits at an idle prompt ([#439](https://github.com/bottrall/riffer-rig/issues/439)) ([0d5198a](https://github.com/bottrall/riffer-rig/commit/0d5198af9b1c65c06277b0201fc48355283bce7e)), closes [#332](https://github.com/bottrall/riffer-rig/issues/332)
|
|
49
|
+
* **terminal:** wire slash autocomplete into the REPL ([#495](https://github.com/bottrall/riffer-rig/issues/495)) ([af936d9](https://github.com/bottrall/riffer-rig/commit/af936d96e786ad9e76e1283763b17dfac3c4daba))
|
|
50
|
+
* **tools:** add bash_output and bash_kill for background jobs ([#409](https://github.com/bottrall/riffer-rig/issues/409)) ([88fc7a9](https://github.com/bottrall/riffer-rig/commit/88fc7a9ad321dc443f57dbb3455c599a7db5e5e0)), closes [#329](https://github.com/bottrall/riffer-rig/issues/329)
|
|
51
|
+
* **tools:** job registry for background bash jobs ([#305](https://github.com/bottrall/riffer-rig/issues/305)) ([54f7df1](https://github.com/bottrall/riffer-rig/commit/54f7df15d140b499ec9c3e3b612c6d71df201563)), closes [#276](https://github.com/bottrall/riffer-rig/issues/276)
|
|
52
|
+
* watch background jobs and route their exits through the Runtime ([#376](https://github.com/bottrall/riffer-rig/issues/376)) ([32a3be2](https://github.com/bottrall/riffer-rig/commit/32a3be20edb330f528318e07a6aaf10e5019e0e2)), closes [#328](https://github.com/bottrall/riffer-rig/issues/328)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
### Bug Fixes
|
|
56
|
+
|
|
57
|
+
* acp banner, close TODO, settings key types ([#304](https://github.com/bottrall/riffer-rig/issues/304)) ([baa6597](https://github.com/bottrall/riffer-rig/commit/baa659764ea1293792a0ee1dd8f40e289ed807bc))
|
|
58
|
+
* **acp:** announce the tool call of a relayed question ([#511](https://github.com/bottrall/riffer-rig/issues/511)) ([b20f0ee](https://github.com/bottrall/riffer-rig/commit/b20f0ee38ac722f7804dc15555cc00971ecde457)), closes [#472](https://github.com/bottrall/riffer-rig/issues/472)
|
|
59
|
+
* **acp:** answer a failed prompt with the provider's message ([#526](https://github.com/bottrall/riffer-rig/issues/526)) ([976c670](https://github.com/bottrall/riffer-rig/commit/976c670b6d5db43d50b969cc951e56c068c0fc58)), closes [#519](https://github.com/bottrall/riffer-rig/issues/519)
|
|
60
|
+
* **acp:** answer a prompt on a busy session with invalid request ([#508](https://github.com/bottrall/riffer-rig/issues/508)) ([3a50652](https://github.com/bottrall/riffer-rig/commit/3a50652a23a98b48675ae5e46df7ba1cc5b98c01)), closes [#473](https://github.com/bottrall/riffer-rig/issues/473)
|
|
61
|
+
* **acp:** close the tool call of a relayed question ([#404](https://github.com/bottrall/riffer-rig/issues/404)) ([2dc638c](https://github.com/bottrall/riffer-rig/commit/2dc638cc5a7a275e5d0f968b9e83530aa97967e4)), closes [#395](https://github.com/bottrall/riffer-rig/issues/395)
|
|
62
|
+
* **acp:** declare the client's MCP servers on session/load ([#374](https://github.com/bottrall/riffer-rig/issues/374)) ([06e07bd](https://github.com/bottrall/riffer-rig/commit/06e07bdea43cdf74be02fe6342b06e344aa75d0e)), closes [#343](https://github.com/bottrall/riffer-rig/issues/343)
|
|
63
|
+
* **acp:** decline build-time questions while session/load builds ([#405](https://github.com/bottrall/riffer-rig/issues/405)) ([98cf668](https://github.com/bottrall/riffer-rig/commit/98cf668041eb6b239d9bc8fa3e47288f7469dcf7)), closes [#394](https://github.com/bottrall/riffer-rig/issues/394)
|
|
64
|
+
* **acp:** re-send the command list after a reload changes it ([#535](https://github.com/bottrall/riffer-rig/issues/535)) ([a904bc7](https://github.com/bottrall/riffer-rig/commit/a904bc7cdba4a39506196980ac0333ec2df7a89f)), closes [#521](https://github.com/bottrall/riffer-rig/issues/521)
|
|
65
|
+
* **acp:** run slash commands instead of sending them to the model ([#494](https://github.com/bottrall/riffer-rig/issues/494)) ([3924ce5](https://github.com/bottrall/riffer-rig/commit/3924ce52b39e0ae3ef4d409200ce00ca464d38e3)), closes [#444](https://github.com/bottrall/riffer-rig/issues/444)
|
|
66
|
+
* **acp:** send available_commands_update on session/load ([#403](https://github.com/bottrall/riffer-rig/issues/403)) ([3659b0a](https://github.com/bottrall/riffer-rig/commit/3659b0a9b7129e7c1664f6158f6b51a46a9d95d4)), closes [#383](https://github.com/bottrall/riffer-rig/issues/383)
|
|
67
|
+
* **acp:** send each notice as a paragraph of its own ([#527](https://github.com/bottrall/riffer-rig/issues/527)) ([e665309](https://github.com/bottrall/riffer-rig/commit/e665309ad401330c9abc511e2645054a274838e2)), closes [#520](https://github.com/bottrall/riffer-rig/issues/520)
|
|
68
|
+
* **acp:** skip blank assistant messages when replaying a loaded session ([#509](https://github.com/bottrall/riffer-rig/issues/509)) ([85f0aa3](https://github.com/bottrall/riffer-rig/commit/85f0aa3582c893d2eb5ef58dbb9103cdd89f7568)), closes [#471](https://github.com/bottrall/riffer-rig/issues/471)
|
|
69
|
+
* **cli:** answer --version and -v with the riffer-rig version ([#399](https://github.com/bottrall/riffer-rig/issues/399)) ([08ad995](https://github.com/bottrall/riffer-rig/commit/08ad995ba8570a2aced722fa1305c025939d5ee4)), closes [#380](https://github.com/bottrall/riffer-rig/issues/380)
|
|
70
|
+
* **cli:** open the picker for a bare -r followed by another flag ([#370](https://github.com/bottrall/riffer-rig/issues/370)) ([e01bd20](https://github.com/bottrall/riffer-rig/commit/e01bd20d8c599d208c0e2541e34d7575df9d7e83)), closes [#342](https://github.com/bottrall/riffer-rig/issues/342)
|
|
71
|
+
* **cli:** recognise clustered short flags such as -pc as headless ([#406](https://github.com/bottrall/riffer-rig/issues/406)) ([2e28f63](https://github.com/bottrall/riffer-rig/commit/2e28f630601ac774652467ca0d1efbbaa5208428)), closes [#384](https://github.com/bottrall/riffer-rig/issues/384)
|
|
72
|
+
* **cli:** reject --max-steps values below 1 ([#499](https://github.com/bottrall/riffer-rig/issues/499)) ([e0e33ad](https://github.com/bottrall/riffer-rig/commit/e0e33ad13e3d04d4f555f0e455997f7d6a5938da)), closes [#467](https://github.com/bottrall/riffer-rig/issues/467)
|
|
73
|
+
* **commands:** confirm the save in /model --save ([#500](https://github.com/bottrall/riffer-rig/issues/500)) ([7c0035b](https://github.com/bottrall/riffer-rig/commit/7c0035b1b6780955f8f8508d6cda3459ab4721eb)), closes [#464](https://github.com/bottrall/riffer-rig/issues/464)
|
|
74
|
+
* **credentials:** never overwrite a malformed auth, settings or trust file ([#415](https://github.com/bottrall/riffer-rig/issues/415)) ([c8d66aa](https://github.com/bottrall/riffer-rig/commit/c8d66aa6babdf791ce9e3a47bdbdd168454dffd0)), closes [#381](https://github.com/bottrall/riffer-rig/issues/381)
|
|
75
|
+
* **credentials:** preserve unrecognised auth.json entries on store and remove ([#365](https://github.com/bottrall/riffer-rig/issues/365)) ([a7d26e7](https://github.com/bottrall/riffer-rig/commit/a7d26e799d64099a711a771b30e42bdf4a8c86c8)), closes [#344](https://github.com/bottrall/riffer-rig/issues/344)
|
|
76
|
+
* **credentials:** tighten an existing auth.json to 0600 on rewrite ([#400](https://github.com/bottrall/riffer-rig/issues/400)) ([59765c8](https://github.com/bottrall/riffer-rig/commit/59765c822cbae0b168c7ba63e440b2dfdc6f4529)), closes [#382](https://github.com/bottrall/riffer-rig/issues/382)
|
|
77
|
+
* **deps:** pin acp-sdk to one minor ([#397](https://github.com/bottrall/riffer-rig/issues/397)) ([7bcad06](https://github.com/bottrall/riffer-rig/commit/7bcad0649686e052afe5e5fc371212800d493237))
|
|
78
|
+
* **deps:** upgrade acp-sdk to 0.11.0 ([#338](https://github.com/bottrall/riffer-rig/issues/338)) ([8e61f4a](https://github.com/bottrall/riffer-rig/commit/8e61f4a887ded320cf668300629f210bb02c91f9))
|
|
79
|
+
* **deps:** upgrade acp-sdk to 0.13.0 ([#424](https://github.com/bottrall/riffer-rig/issues/424)) ([ba080c1](https://github.com/bottrall/riffer-rig/commit/ba080c1621cff5d3ea77e73863558e6778ff6445))
|
|
80
|
+
* **headless:** print the --verbose tool trace in --json mode ([#501](https://github.com/bottrall/riffer-rig/issues/501)) ([4fba2a0](https://github.com/bottrall/riffer-rig/commit/4fba2a060bd07e1745d46f41bf6b655a553f8d5a)), closes [#468](https://github.com/bottrall/riffer-rig/issues/468)
|
|
81
|
+
* **headless:** refuse a whitespace-only prompt ([#498](https://github.com/bottrall/riffer-rig/issues/498)) ([633d099](https://github.com/bottrall/riffer-rig/commit/633d099cdaf473a963e20d4b11140749580afe64)), closes [#465](https://github.com/bottrall/riffer-rig/issues/465)
|
|
82
|
+
* **headless:** replace invalid UTF-8 in piped stdin ([#482](https://github.com/bottrall/riffer-rig/issues/482)) ([1e726f4](https://github.com/bottrall/riffer-rig/commit/1e726f4650ea3a968e466aee7480ee57caf86580)), closes [#451](https://github.com/bottrall/riffer-rig/issues/451)
|
|
83
|
+
* **headless:** report a missing session before the missing prompt ([#507](https://github.com/bottrall/riffer-rig/issues/507)) ([60ad490](https://github.com/bottrall/riffer-rig/commit/60ad49009836e7706a0429927d8f0ad2630ec7ac))
|
|
84
|
+
* **headless:** separate follow-up answers with a blank line in text mode ([#505](https://github.com/bottrall/riffer-rig/issues/505)) ([4c74399](https://github.com/bottrall/riffer-rig/commit/4c7439915932155c50378769b5d40f01eba29dc9)), closes [#469](https://github.com/bottrall/riffer-rig/issues/469)
|
|
85
|
+
* **headless:** serialise non-pair Enumerables in Ndjson as arrays ([#357](https://github.com/bottrall/riffer-rig/issues/357)) ([0b5e16a](https://github.com/bottrall/riffer-rig/commit/0b5e16a6339b42d87504bfd85e21f501aeaad9e6)), closes [#348](https://github.com/bottrall/riffer-rig/issues/348)
|
|
86
|
+
* **headless:** stop waiting on a silent stdin when -p has a prompt argument ([#541](https://github.com/bottrall/riffer-rig/issues/541)) ([32d0ca9](https://github.com/bottrall/riffer-rig/commit/32d0ca9cbccf089461030de33f8f4475f1b2fb47)), closes [#529](https://github.com/bottrall/riffer-rig/issues/529)
|
|
87
|
+
* **headless:** stream stdout to pipes and files as it is written ([#484](https://github.com/bottrall/riffer-rig/issues/484)) ([3fbc295](https://github.com/bottrall/riffer-rig/commit/3fbc295ebef30269546ec87c3af0fb4a8a6d6fe1)), closes [#452](https://github.com/bottrall/riffer-rig/issues/452)
|
|
88
|
+
* **loader:** ask again about a trust question left unanswered ([#522](https://github.com/bottrall/riffer-rig/issues/522)) ([c5e8dae](https://github.com/bottrall/riffer-rig/commit/c5e8dae6891cd1388dc71ef8c3d38e5e55021c7f)), closes [#517](https://github.com/bottrall/riffer-rig/issues/517)
|
|
89
|
+
* **mcp:** preserve stdio fields in Declaration#with_headers ([#310](https://github.com/bottrall/riffer-rig/issues/310)) ([90b6f8e](https://github.com/bottrall/riffer-rig/commit/90b6f8e2b87b68b726eec599e5d6c905801681ff)), closes [#307](https://github.com/bottrall/riffer-rig/issues/307)
|
|
90
|
+
* route missing-session wording through the sessions collaborator ([#298](https://github.com/bottrall/riffer-rig/issues/298)) ([a22e2bd](https://github.com/bottrall/riffer-rig/commit/a22e2bd483c44a6ec345f50f0a15a8a84c4c9b66)), closes [#283](https://github.com/bottrall/riffer-rig/issues/283)
|
|
91
|
+
* **runtime:** keep a resumed session's first user message ([#478](https://github.com/bottrall/riffer-rig/issues/478)) ([3a1e7e5](https://github.com/bottrall/riffer-rig/commit/3a1e7e5523ffc5cc060bc57eeeb70a46cc3467cd)), closes [#441](https://github.com/bottrall/riffer-rig/issues/441)
|
|
92
|
+
* **runtime:** show the provider's response body message on HTTP errors ([#491](https://github.com/bottrall/riffer-rig/issues/491)) ([4e93ec4](https://github.com/bottrall/riffer-rig/commit/4e93ec486820f8a49b8d6a00a7838ff9e0f90561))
|
|
93
|
+
* **runtime:** warn about tool allowlist names no extension registered ([#485](https://github.com/bottrall/riffer-rig/issues/485)) ([da61612](https://github.com/bottrall/riffer-rig/commit/da6161282e965dac648c6b4b213c9441d8385b79)), closes [#453](https://github.com/bottrall/riffer-rig/issues/453)
|
|
94
|
+
* **sdk:** return a message when the gem install fails ([#369](https://github.com/bottrall/riffer-rig/issues/369)) ([1cf5557](https://github.com/bottrall/riffer-rig/commit/1cf55574568868fa162200d84b74eb34f73cd9c2)), closes [#351](https://github.com/bottrall/riffer-rig/issues/351)
|
|
95
|
+
* **sessions:** let --model win over a resumed session's /model switch ([#537](https://github.com/bottrall/riffer-rig/issues/537)) ([8233c13](https://github.com/bottrall/riffer-rig/commit/8233c13f75cbb883577c0bc00a40e80b6d9507b4)), closes [#528](https://github.com/bottrall/riffer-rig/issues/528)
|
|
96
|
+
* **sessions:** resume a session in the directory it was saved in ([#544](https://github.com/bottrall/riffer-rig/issues/544)) ([6cd8df2](https://github.com/bottrall/riffer-rig/commit/6cd8df2c80947920d5ea479a4bd5cd1b0b19a892)), closes [#530](https://github.com/bottrall/riffer-rig/issues/530)
|
|
97
|
+
* **settings:** report a non-string model as a settings error ([#510](https://github.com/bottrall/riffer-rig/issues/510)) ([5fde7c2](https://github.com/bottrall/riffer-rig/commit/5fde7c2a0687a99fa3a83c96c0bfc016329f82e7)), closes [#470](https://github.com/bottrall/riffer-rig/issues/470)
|
|
98
|
+
* single credentials install flow, fixing the /auth partial-apply ([#295](https://github.com/bottrall/riffer-rig/issues/295)) ([d6626d8](https://github.com/bottrall/riffer-rig/commit/d6626d8b8f46c78f2c9a7b3a50f4d730c4d63a71))
|
|
99
|
+
* **stores:** keep recording skill activations after a reload ([#371](https://github.com/bottrall/riffer-rig/issues/371)) ([d81abb2](https://github.com/bottrall/riffer-rig/commit/d81abb2a33efba05bf0264ea5708808b95a4e352)), closes [#327](https://github.com/bottrall/riffer-rig/issues/327)
|
|
100
|
+
* **stores:** skip non-object JSON lines in Stores::JSONL ([#361](https://github.com/bottrall/riffer-rig/issues/361)) ([14f9d3a](https://github.com/bottrall/riffer-rig/commit/14f9d3afe2dd46aceb33c5d2ffaa59e773e944ec)), closes [#346](https://github.com/bottrall/riffer-rig/issues/346)
|
|
101
|
+
* **terminal:** announce the exits a follow-up turn actually delivers ([#542](https://github.com/bottrall/riffer-rig/issues/542)) ([f04e762](https://github.com/bottrall/riffer-rig/commit/f04e762922eef0c015ffef25e84b474897973367)), closes [#532](https://github.com/bottrall/riffer-rig/issues/532)
|
|
102
|
+
* **terminal:** cancel a credential question on Ctrl-C ([#490](https://github.com/bottrall/riffer-rig/issues/490)) ([37579b6](https://github.com/bottrall/riffer-rig/commit/37579b61f448d0015ff7947f81e10e5fbb7c03ab))
|
|
103
|
+
* **terminal:** close the session /new or /resume swapped in at exit ([#480](https://github.com/bottrall/riffer-rig/issues/480)) ([dd3de41](https://github.com/bottrall/riffer-rig/commit/dd3de41d87cda9a5b5e39b4693eb927a5a0da9bc)), closes [#442](https://github.com/bottrall/riffer-rig/issues/442)
|
|
104
|
+
* **terminal:** confirm /model in one line instead of the banner ([#401](https://github.com/bottrall/riffer-rig/issues/401)) ([083a2c0](https://github.com/bottrall/riffer-rig/commit/083a2c076a9c6d2b2dc028a26f68200b5ea8cf95)), closes [#378](https://github.com/bottrall/riffer-rig/issues/378)
|
|
105
|
+
* **terminal:** fit the banner to narrow terminals ([#513](https://github.com/bottrall/riffer-rig/issues/513)) ([9a19efa](https://github.com/bottrall/riffer-rig/commit/9a19efaf437c633f89600c9d7b3be18d83eacedb)), closes [#474](https://github.com/bottrall/riffer-rig/issues/474)
|
|
106
|
+
* **terminal:** handle Ctrl-C at idle when SIGINT is inherited as ignored ([#512](https://github.com/bottrall/riffer-rig/issues/512)) ([73d51e7](https://github.com/bottrall/riffer-rig/commit/73d51e7396bf3b9b37a6230fe056501eb85d3852)), closes [#476](https://github.com/bottrall/riffer-rig/issues/476)
|
|
107
|
+
* **terminal:** indent and wrap command output like the turn report ([#497](https://github.com/bottrall/riffer-rig/issues/497)) ([2aadbd0](https://github.com/bottrall/riffer-rig/commit/2aadbd049a96de45e1b11e323e8c89c069eb9a30)), closes [#458](https://github.com/bottrall/riffer-rig/issues/458)
|
|
108
|
+
* **terminal:** interrupt a streaming reply on Ctrl-C ([#416](https://github.com/bottrall/riffer-rig/issues/416)) ([0f123dc](https://github.com/bottrall/riffer-rig/commit/0f123dc01fa2f30ceab3cdd45c08e77a73845efe))
|
|
109
|
+
* **terminal:** keep a blank row between output and the input row ([#534](https://github.com/bottrall/riffer-rig/issues/534)) ([01070f4](https://github.com/bottrall/riffer-rig/commit/01070f40e7b6b6ba0d3a8671d3d6c37bd55ba68f)), closes [#515](https://github.com/bottrall/riffer-rig/issues/515)
|
|
110
|
+
* **terminal:** keep a pasted prompt's line breaks in its echo ([#536](https://github.com/bottrall/riffer-rig/issues/536)) ([73b73ec](https://github.com/bottrall/riffer-rig/commit/73b73ecfb4cd59b8eacb8bc43b38048d17349685)), closes [#525](https://github.com/bottrall/riffer-rig/issues/525)
|
|
111
|
+
* **terminal:** keep a whitespace-only line as a paragraph break ([#366](https://github.com/bottrall/riffer-rig/issues/366)) ([3a402c8](https://github.com/bottrall/riffer-rig/commit/3a402c85b64b61f508a7990b36b032d9276ab6e4)), closes [#341](https://github.com/bottrall/riffer-rig/issues/341)
|
|
112
|
+
* **terminal:** keep the columns of a /trace line that wraps ([#538](https://github.com/bottrall/riffer-rig/issues/538)) ([d24cfc5](https://github.com/bottrall/riffer-rig/commit/d24cfc501cecfd7e3129d12b72487bc467af640a)), closes [#524](https://github.com/bottrall/riffer-rig/issues/524)
|
|
113
|
+
* **terminal:** keep the key reader alive on non-UTF-8 input ([#496](https://github.com/bottrall/riffer-rig/issues/496)) ([f7382c6](https://github.com/bottrall/riffer-rig/commit/f7382c6d4b55fad766285c2c1e6a910ae9f5f291)), closes [#443](https://github.com/bottrall/riffer-rig/issues/443)
|
|
114
|
+
* **terminal:** make the key pipeline restartable and end-of-input aware ([#408](https://github.com/bottrall/riffer-rig/issues/408)) ([c2b4787](https://github.com/bottrall/riffer-rig/commit/c2b4787c35e0e86a1b196b4538d52d8eafe045bd)), closes [#396](https://github.com/bottrall/riffer-rig/issues/396)
|
|
115
|
+
* **terminal:** print the missing-session notice below the banner ([#514](https://github.com/bottrall/riffer-rig/issues/514)) ([2b3a296](https://github.com/bottrall/riffer-rig/commit/2b3a29687a099bfa3eee0d9a4bd767dee6621ea3)), closes [#475](https://github.com/bottrall/riffer-rig/issues/475)
|
|
116
|
+
* **terminal:** render a paragraph's single newlines as line breaks ([#479](https://github.com/bottrall/riffer-rig/issues/479)) ([fa9d08f](https://github.com/bottrall/riffer-rig/commit/fa9d08f9122952a5c7af1c6876ccdfdb21c7550f)), closes [#450](https://github.com/bottrall/riffer-rig/issues/450)
|
|
117
|
+
* **terminal:** render non-object tool-call arguments verbatim ([#359](https://github.com/bottrall/riffer-rig/issues/359)) ([956ae23](https://github.com/bottrall/riffer-rig/commit/956ae2385b42012b1832fc58a7765de570dc4846)), closes [#347](https://github.com/bottrall/riffer-rig/issues/347)
|
|
118
|
+
* **terminal:** replay a job-exit turn on its own when resuming ([#493](https://github.com/bottrall/riffer-rig/issues/493)) ([24c84c2](https://github.com/bottrall/riffer-rig/commit/24c84c29b884b4bcb5818a61fa903a6c8251f5a4))
|
|
119
|
+
* **terminal:** report a bare / instead of sending it to the model ([#504](https://github.com/bottrall/riffer-rig/issues/504)) ([c66d2ae](https://github.com/bottrall/riffer-rig/commit/c66d2ae47a9477d1819b7aeb0f0ccf86fa2952fd)), closes [#460](https://github.com/bottrall/riffer-rig/issues/460)
|
|
120
|
+
* **terminal:** say sessions are off under --no-save instead of none saved ([#506](https://github.com/bottrall/riffer-rig/issues/506)) ([777aba0](https://github.com/bottrall/riffer-rig/commit/777aba0c4b368d6d95f26447b4871f01c2a82201)), closes [#463](https://github.com/bottrall/riffer-rig/issues/463)
|
|
121
|
+
* **terminal:** say when a picker filter matches no session ([#502](https://github.com/bottrall/riffer-rig/issues/502)) ([07b39bd](https://github.com/bottrall/riffer-rig/commit/07b39bdac94ec32731475ac22d844318178ddd3d)), closes [#462](https://github.com/bottrall/riffer-rig/issues/462)
|
|
122
|
+
* **terminal:** say when the /resume picker closes without a pick ([#503](https://github.com/bottrall/riffer-rig/issues/503)) ([327d34b](https://github.com/bottrall/riffer-rig/commit/327d34bc681e18a39bba4dc3e8565242e5a45ad8)), closes [#461](https://github.com/bottrall/riffer-rig/issues/461)
|
|
123
|
+
* **terminal:** show a static hint on the status line while a question waits ([#486](https://github.com/bottrall/riffer-rig/issues/486)) ([ee53ed5](https://github.com/bottrall/riffer-rig/commit/ee53ed5c61eaacf14acf57af7a66578f24ff797a)), closes [#457](https://github.com/bottrall/riffer-rig/issues/457)
|
|
124
|
+
* **terminal:** show every reply of a turn a job exit continued ([#543](https://github.com/bottrall/riffer-rig/issues/543)) ([763558d](https://github.com/bottrall/riffer-rig/commit/763558d845b9387cdd53e74f862991c602034b59)), closes [#531](https://github.com/bottrall/riffer-rig/issues/531)
|
|
125
|
+
* **terminal:** show the cursor while suspended with Ctrl-Z ([#414](https://github.com/bottrall/riffer-rig/issues/414)) ([fa6e7b4](https://github.com/bottrall/riffer-rig/commit/fa6e7b43e42405cb289e15741d7162880ea0583e))
|
|
126
|
+
* **terminal:** size a table by its header and keep pipes in code spans ([#489](https://github.com/bottrall/riffer-rig/issues/489)) ([324ba0e](https://github.com/bottrall/riffer-rig/commit/324ba0eead841027cafff9d60441de90500f4e25)), closes [#455](https://github.com/bottrall/riffer-rig/issues/455)
|
|
127
|
+
* **terminal:** stop Wrapper hanging when the width is at or below the indent ([#367](https://github.com/bottrall/riffer-rig/issues/367)) ([cbbca89](https://github.com/bottrall/riffer-rig/commit/cbbca899769a0782ad146e705f06a6055168daa4)), closes [#340](https://github.com/bottrall/riffer-rig/issues/340)
|
|
128
|
+
* **terminal:** treat 0 in the /resume picker as filter text ([#362](https://github.com/bottrall/riffer-rig/issues/362)) ([ae7516b](https://github.com/bottrall/riffer-rig/commit/ae7516bba9ea207337ef856d4132eaf8ee6095a4)), closes [#350](https://github.com/bottrall/riffer-rig/issues/350)
|
|
129
|
+
* **terminal:** word-wrap questions with a hanging indent ([#540](https://github.com/bottrall/riffer-rig/issues/540)) ([16fb443](https://github.com/bottrall/riffer-rig/commit/16fb443eb38e6428c313fb763dc7480f30cc56b3)), closes [#523](https://github.com/bottrall/riffer-rig/issues/523)
|
|
130
|
+
* **terminal:** word-wrap the echoed prompt with a hanging indent ([#483](https://github.com/bottrall/riffer-rig/issues/483)) ([3f357a1](https://github.com/bottrall/riffer-rig/commit/3f357a12c7af55a676dfc00af3ef4e9d593b9b15)), closes [#459](https://github.com/bottrall/riffer-rig/issues/459)
|
|
131
|
+
* **terminal:** wrap a table column at spaces before breaking a token ([#518](https://github.com/bottrall/riffer-rig/issues/518)) ([6208f11](https://github.com/bottrall/riffer-rig/commit/6208f1195a0bef97307984b35f923487bd865b9b)), closes [#516](https://github.com/bottrall/riffer-rig/issues/516)
|
|
132
|
+
* **terminal:** wrap markdown tables to the terminal width ([#492](https://github.com/bottrall/riffer-rig/issues/492)) ([3b998eb](https://github.com/bottrall/riffer-rig/commit/3b998eba84bf7b2311984c7d0b64c54ee2be3ded))
|
|
133
|
+
* **terminal:** wrap prose by display columns and keep its indentation ([#412](https://github.com/bottrall/riffer-rig/issues/412)) ([40f83ce](https://github.com/bottrall/riffer-rig/commit/40f83ce3b4cd7a00a05a8db0d2fc024b6927b024)), closes [#385](https://github.com/bottrall/riffer-rig/issues/385)
|
|
134
|
+
* **tools:** cap background job output and remove it on close ([#417](https://github.com/bottrall/riffer-rig/issues/417)) ([02a3c5e](https://github.com/bottrall/riffer-rig/commit/02a3c5ec00b8a0435ff70c7560e0ab652ec69cd7)), closes [#391](https://github.com/bottrall/riffer-rig/issues/391)
|
|
135
|
+
* **tools:** end a background job's process group after its leader exits ([#413](https://github.com/bottrall/riffer-rig/issues/413)) ([26de424](https://github.com/bottrall/riffer-rig/commit/26de424d91c7c73623386e9bbd348358536cfc71)), closes [#390](https://github.com/bottrall/riffer-rig/issues/390)
|
|
136
|
+
* **tools:** give background bash jobs an empty stdin ([#488](https://github.com/bottrall/riffer-rig/issues/488)) ([23a1a1c](https://github.com/bottrall/riffer-rig/commit/23a1a1c266f7a938c40c0b07c5a0838be6d24d79)), closes [#445](https://github.com/bottrall/riffer-rig/issues/445)
|
|
137
|
+
* **tools:** keep bash output valid UTF-8 and report sub-second timeouts ([#360](https://github.com/bottrall/riffer-rig/issues/360)) ([9d74845](https://github.com/bottrall/riffer-rig/commit/9d748453ecab23ac32995d0d26495cfe707ad6d9)), closes [#345](https://github.com/bottrall/riffer-rig/issues/345)
|
|
138
|
+
* **tools:** let bash_kill stop a stopped background job ([#487](https://github.com/bottrall/riffer-rig/issues/487)) ([2b5d13e](https://github.com/bottrall/riffer-rig/commit/2b5d13e3096b6a11ab59c5b0002e979f6abf0d21)), closes [#447](https://github.com/bottrall/riffer-rig/issues/447)
|
|
139
|
+
* **tools:** read bash output while the command runs ([#407](https://github.com/bottrall/riffer-rig/issues/407)) ([3a94502](https://github.com/bottrall/riffer-rig/commit/3a94502e5328c7b9edbf1ab5a64ac4386b075610)), closes [#379](https://github.com/bottrall/riffer-rig/issues/379)
|
|
140
|
+
* **tools:** replace invalid UTF-8 bytes in read output ([#481](https://github.com/bottrall/riffer-rig/issues/481)) ([8bc5c8b](https://github.com/bottrall/riffer-rig/commit/8bc5c8b1686ca4511ca595d535860c783eb170db)), closes [#446](https://github.com/bottrall/riffer-rig/issues/446)
|
|
141
|
+
* **tools:** report a background job ended by a signal as killed ([#539](https://github.com/bottrall/riffer-rig/issues/539)) ([db792ec](https://github.com/bottrall/riffer-rig/commit/db792ecde236947ba4681c8132e981def7e04fd0)), closes [#533](https://github.com/bottrall/riffer-rig/issues/533)
|
|
142
|
+
* **tools:** treat a missing background job output file as empty ([#402](https://github.com/bottrall/riffer-rig/issues/402)) ([8464463](https://github.com/bottrall/riffer-rig/commit/846446329657c644e6784c7e8d772ff6d3814047)), closes [#392](https://github.com/bottrall/riffer-rig/issues/392)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
### Documentation
|
|
146
|
+
|
|
147
|
+
* describe the Loader::Options and Credentials.install APIs ([#411](https://github.com/bottrall/riffer-rig/issues/411)) ([a3bb5a4](https://github.com/bottrall/riffer-rig/commit/a3bb5a43d0418042919743c3765a99c034f73321)), closes [#387](https://github.com/bottrall/riffer-rig/issues/387)
|
|
148
|
+
|
|
3
149
|
## [0.12.0](https://github.com/bottrall/riffer-rig/compare/v0.11.0...v0.12.0) (2026-10-07)
|
|
4
150
|
|
|
5
151
|
|
data/README.md
CHANGED
|
@@ -34,13 +34,14 @@ riffer
|
|
|
34
34
|
|
|
35
35
|
The first run asks which model to use, as `provider/name` (for example `anthropic/claude-sonnet-4-6`), and saves the answer as `model` in `~/.riffer/settings.json`; it then asks for any missing credential ([Authentication](#authentication)). After that, `riffer` opens straight into the prompt. [Getting started](docs/GETTING_STARTED.md) walks through a first session.
|
|
36
36
|
|
|
37
|
-
The model is the first of these that is set: `--model`, `RIFFER_MODEL`, `model` in `<cwd>/.riffer/settings.json`, then in `~/.riffer/settings.json` ([Configuration](docs/CONFIGURATION.md#model)).
|
|
37
|
+
The model is the first of these that is set: `--model`, `RIFFER_MODEL`, `model` in `<cwd>/.riffer/settings.json`, then in `~/.riffer/settings.json` ([Configuration](docs/CONFIGURATION.md#model)). The reasoning effort resolves the same way: `--reasoning`, `RIFFER_REASONING`, then `reasoning` in the settings ([Configuration](docs/CONFIGURATION.md#reasoning)).
|
|
38
38
|
|
|
39
39
|
### Flags
|
|
40
40
|
|
|
41
41
|
| Flag | Effect |
|
|
42
42
|
| ----------------------- | -------------------------------------------------------------------------- |
|
|
43
43
|
| `--model provider/name` | the model for this session, over `RIFFER_MODEL` and the settings |
|
|
44
|
+
| `--reasoning LEVEL` | the reasoning effort for this session, over `RIFFER_REASONING` and the settings |
|
|
44
45
|
| `--no-extensions` | skips the [`rig.rb` files](docs/EXTENSIONS.md#the-rigrb-files) and gem autoload; the bundle still loads |
|
|
45
46
|
| `--no-skills` | leaves out [Agent Skills](docs/SKILLS.md) |
|
|
46
47
|
| `--no-agents-md` | leaves out the [AGENTS.md](docs/INSTRUCTIONS.md#agentsmd) instructions |
|
|
@@ -48,8 +49,9 @@ The model is the first of these that is set: `--model`, `RIFFER_MODEL`, `model`
|
|
|
48
49
|
| `--max-steps N` | stops a turn after `N` model calls |
|
|
49
50
|
| `--no-save` | does not save this session to the [store](docs/SESSIONS.md) |
|
|
50
51
|
| `-c`, `--continue` | continues the most recent session in this directory ([Sessions](docs/SESSIONS.md#resuming)) |
|
|
51
|
-
| `-r ID`, `--resume ID`
|
|
52
|
+
| `-r [ID]`, `--resume [ID]` | resumes the session with id `ID`; bare `-r` opens the [picker](docs/SESSIONS.md#the-picker) ([Sessions](docs/SESSIONS.md#resuming)) |
|
|
52
53
|
| `-h`, `--help` | prints the usage |
|
|
54
|
+
| `-v`, `--version` | prints the version |
|
|
53
55
|
|
|
54
56
|
An editor registers the agent as `riffer acp`, the same Runtimes over the [Agent Client Protocol](https://agentclientprotocol.com) on stdio ([ACP](docs/ACP.md)).
|
|
55
57
|
|
|
@@ -63,23 +65,25 @@ git diff | riffer -p "review this diff" # piped stdin appended as context
|
|
|
63
65
|
echo "explain this diff" | riffer -p # piped stdin alone is the prompt
|
|
64
66
|
```
|
|
65
67
|
|
|
66
|
-
Everything loads exactly as the REPL does, the shared flags work the same — `-c` and `-r` included: `riffer -p -c "now run the tests"` continues the most recent session in this directory, and a missing session exits 2 ([Headless](docs/HEADLESS.md)). The session is saved like any other unless `--no-save`. Only the assistant's text is printed, streamed to stdout; errors and warnings go to stderr, and `--verbose` adds a one-line trace of each tool call there. With `--json`, stdout is instead one JSON object per line for every Runtime event — the NDJSON stream ([Headless](docs/HEADLESS.md#the-ndjson-stream---json)). Headless never prompts: a missing model, credential, or SDK prints the reason on stderr and exits 2.
|
|
68
|
+
Everything loads exactly as the REPL does, the shared flags work the same — `-c` and `-r` included: `riffer -p -c "now run the tests"` continues the most recent session in this directory, and a missing session exits 2 ([Headless](docs/HEADLESS.md)). The session is saved like any other unless `--no-save`. Only the assistant's text is printed, streamed to stdout; errors and warnings go to stderr, and `--verbose` adds a one-line trace of each tool call there. With `--json`, stdout is instead one JSON object per line for every Runtime event — the NDJSON stream ([Headless](docs/HEADLESS.md#the-ndjson-stream---json)). A run whose model leaves background jobs running waits for them, giving the model a further turn as each one exits, and kills any left after `--job-idle-timeout` seconds (600 by default) without an exit ([Headless](docs/HEADLESS.md#background-jobs)). Headless never prompts: a missing model, credential, or SDK prints the reason on stderr and exits 2.
|
|
67
69
|
|
|
68
|
-
The exit code says how the turn ended: `0` finished, `1` runtime error, `2` usage or configuration, `3` the turn ended without completing (`--max-steps`, a full context window, a provider content filter), `130` SIGINT (the turn is cancelled first).
|
|
70
|
+
The exit code says how the turn ended: `0` finished, `1` runtime error, `2` usage or configuration, `3` the turn ended without completing (`--max-steps`, a full context window, a provider content filter) or its background jobs passed the idle timeout, `130` SIGINT (the turn is cancelled first).
|
|
69
71
|
|
|
70
72
|
### In the session
|
|
71
73
|
|
|
72
|
-
Type a prompt and press Enter
|
|
74
|
+
Type a prompt and press Enter. While the turn runs, the status line under the input shows its time, steps, tool calls, tokens and cost, and Ctrl-T peeks at what the model is writing; the reply is printed when the turn ends, followed by a stat line (`N steps · mm:ss · ↑in · ↓out · session N tok`, plus the turn's cost and the session's when the model is [priced](docs/CONFIGURATION.md#catalog_files)). The input line stays open throughout: a message sent during a turn is queued and runs when the turn ends. [Terminal](docs/TERMINAL.md) has every key.
|
|
73
75
|
|
|
74
|
-
- Ctrl-C during a turn cancels it
|
|
75
|
-
- `/exit` or `/quit` ends the session, as does Ctrl-D.
|
|
76
|
-
- `/
|
|
77
|
-
- `/model provider/name` switches the model ([below](#switching-the-model)), and `/skill:<name> [text]` runs a skill ([Skills](docs/SKILLS.md)).
|
|
78
|
-
- Any other `/name args` runs the Runtime command of that name, such as one an extension registers ([Extensions](docs/EXTENSIONS.md)); an unknown name is reported and nothing is sent to the model.
|
|
76
|
+
- Ctrl-C during a turn cancels it. Ctrl-C with no turn running asks for a second one, which exits.
|
|
77
|
+
- `/exit` or `/quit` ends the session, as does Ctrl-D on an empty line.
|
|
78
|
+
- `/help` lists the session's slash commands. `/resume [--all]`, `/new`, `/cost`, `/trace`, `/skill:<name>` and the others are described in [Terminal](docs/TERMINAL.md#commands); `/model` is covered [below](#switching-the-model), and `/reasoning` works the same way for the reasoning effort.
|
|
79
79
|
|
|
80
80
|
### Switching the model
|
|
81
81
|
|
|
82
|
-
`/model provider/name` switches the model for the current session only, keeping the conversation so far
|
|
82
|
+
`/model provider/name` switches the model for the current session only, keeping the conversation so far, and confirms it in one line: `/model openai/gpt-5` prints `Model switched to openai/gpt-5`. The provider prefix is required: a bare name such as `/model sonnet` is rejected with the list of providers. `/model` alone shows the model in use. Switching runs the same setup for the new provider as startup does: its SDK gem is offered for install (or refused with the exact Gemfile line), and missing credentials are resolved — you are prompted for them when the host can ask, and the values apply to the running session immediately. The switch is refused with one error when the host cannot supply what is missing, and the model is left unchanged. `/model --save` writes the model in effect to the home `settings.json`, so new sessions start with it; `/model provider/name --save` switches and saves in one step, printing `Model switched to openai/gpt-5 and saved to ~/.riffer/settings.json` (a bare `/model --save` prints `Saved openai/gpt-5 to ~/.riffer/settings.json`), and a refused switch saves nothing ([Configuration](docs/CONFIGURATION.md#model)).
|
|
83
|
+
|
|
84
|
+
### Switching the reasoning level
|
|
85
|
+
|
|
86
|
+
`/reasoning level` switches the reasoning effort for the current session only, keeping the conversation so far: `/reasoning high` prints `Reasoning switched to high`, `/reasoning off` turns reasoning off, and `/reasoning` alone shows the level in effect. A level riffer does not accept is rejected naming the levels it accepts. `/reasoning --save` writes the level in effect to the home `settings.json` (`/reasoning high --save` switches and saves in one step), and a home file that no longer parses is reported instead of written. The switch survives a resume, and a `--reasoning` chosen for the run wins over it for that run only ([Configuration](docs/CONFIGURATION.md#reasoning)).
|
|
83
87
|
|
|
84
88
|
## Authentication
|
|
85
89
|
|
|
@@ -116,18 +120,19 @@ Inside a session, `/auth` lists every provider with where its secret comes from
|
|
|
116
120
|
|
|
117
121
|
Settings live in two scopes, both optional: `~/.riffer/settings.json` for every project, and `<cwd>/.riffer/settings.json` for one project, merged key by key with the project winning ([Configuration](docs/CONFIGURATION.md)). Every core key is optional:
|
|
118
122
|
|
|
119
|
-
| Key
|
|
120
|
-
|
|
|
121
|
-
| `model`
|
|
122
|
-
| `reasoning`
|
|
123
|
-
| `
|
|
124
|
-
| `providers`
|
|
125
|
-
| `extensions`
|
|
126
|
-
| `reload`
|
|
127
|
-
| `sessions`
|
|
128
|
-
| `tools`
|
|
123
|
+
| Key | What it sets |
|
|
124
|
+
| -------------- | -------------------------------------------------------------------------------- |
|
|
125
|
+
| `model` | the model new sessions start with, as `provider/name` |
|
|
126
|
+
| `reasoning` | the reasoning effort, which riffer translates to the provider's own parameter |
|
|
127
|
+
| `catalog_files`| the model catalog JSON files holding pricing and reasoning maps |
|
|
128
|
+
| `providers` | non-secret provider fields such as an endpoint or region (home file only) |
|
|
129
|
+
| `extensions` | `disabled` — bundled extensions to leave out; `autoload` — gem extension autoload |
|
|
130
|
+
| `reload` | `"auto"` (default) or `"manual"` — the hot-reload trigger |
|
|
131
|
+
| `sessions` | `save: false` stops saving sessions to the store |
|
|
132
|
+
| `tools` | the provider-native tool switches (`native`), off by default |
|
|
129
133
|
|
|
130
134
|
- `RIFFER_MODEL` — the model for this run as `provider/name`, winning over the `model` setting. A bare name such as `sonnet` is rejected with the list of providers.
|
|
135
|
+
- `RIFFER_REASONING` — the reasoning effort for this run, winning over the `reasoning` setting; a level riffer does not accept is rejected naming the levels it accepts.
|
|
131
136
|
- `AGENTS.md` — `~/.riffer/AGENTS.md` and an `AGENTS.md` in the current working directory or any directory above it are re-read every turn as instructions that take precedence over the default norms ([Instructions](docs/INSTRUCTIONS.md#agentsmd)).
|
|
132
137
|
- Skills — Agent Skills in `.agents/skills/` from the working directory up to the repository root, and in `~/.agents/skills/`, are offered to the model, and `/skill:<name> [text]` runs one ([Skills](docs/SKILLS.md)).
|
|
133
138
|
- MCP servers — declared under the `mcp` key in either settings file and registered with the Runtime ([MCP](docs/MCP.md)).
|
|
@@ -176,6 +181,7 @@ Start here:
|
|
|
176
181
|
|
|
177
182
|
Using the terminal:
|
|
178
183
|
|
|
184
|
+
- [Terminal](https://riffer.bottrall.dev/guides/terminal/) — The input line and its keys, queueing, the status line, peek, resume replay
|
|
179
185
|
- [Configuration](https://riffer.bottrall.dev/guides/configuration/) — Settings scopes and every core key
|
|
180
186
|
- [Instructions](https://riffer.bottrall.dev/guides/instructions/) — How the system message is built; AGENTS.md
|
|
181
187
|
- [Tools](https://riffer.bottrall.dev/guides/tools/) — The bundled toolkit and provider-native tools
|
|
@@ -219,9 +225,9 @@ Every project chore is a script in `bin/`. The Rakefile behind them is an implem
|
|
|
219
225
|
|
|
220
226
|
PR titles are [conventional commits](https://www.conventionalcommits.org/) and are linted in CI: `feat:` bumps the minor version, `fix:` bumps the patch, and `feat!:` marks a breaking change (also a minor bump while we are on 0.x). `chore:`, `docs:`, `ci:`, `refactor:` and `test:` never release. Squash-merging makes the title the commit on `main`.
|
|
221
227
|
|
|
222
|
-
|
|
228
|
+
A PR whose code nothing in the live path reaches yet is titled `refactor:`, including fixes to such code; the PR that wires it in carries the `feat:` or `fix:`, titled for what the user gets. The changelog and GitHub Release are generated from titles, so a `feat:` on unreachable code advertises a feature nobody can use.
|
|
223
229
|
|
|
224
|
-
|
|
230
|
+
[release-please](https://github.com/googleapis/release-please) keeps a release PR open that bumps `lib/riffer/rig/version.rb` and writes `CHANGELOG.md`. Merging that PR tags `vX.Y.Z`, creates the GitHub Release and publishes the gem to RubyGems.org through Trusted Publishing; nothing is pushed by hand.
|
|
225
231
|
|
|
226
232
|
## Contributing
|
|
227
233
|
|
data/lib/riffer/rig/acp/host.rb
CHANGED
|
@@ -1,25 +1,36 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'acp/sdk'
|
|
4
|
+
require 'securerandom'
|
|
4
5
|
|
|
5
6
|
class Riffer::Rig::ACP::Host
|
|
6
|
-
|
|
7
|
+
include Riffer::Rig::Hosts::NonInteractive
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
CAPABILITIES = Set[:notify, :ask, :confirm].freeze #: Set[Symbol]
|
|
10
|
+
BUILDING_CAPABILITIES = Set[:notify].freeze #: Set[Symbol]
|
|
11
|
+
|
|
12
|
+
# @rbs @client: ::ACP::AgentConnection::Client
|
|
9
13
|
# @rbs @session_id: String?
|
|
10
|
-
# @rbs @buffered: Array[
|
|
14
|
+
# @rbs @buffered: Array[::ACP::Types::SessionUpdate::t]
|
|
15
|
+
# @rbs @lock: Thread::Mutex
|
|
16
|
+
|
|
17
|
+
# @dynamic client=
|
|
18
|
+
attr_writer :client #: ::ACP::AgentConnection::Client
|
|
11
19
|
|
|
12
|
-
# @rbs client: ::ACP::AgentConnection::
|
|
20
|
+
# @rbs client: ::ACP::AgentConnection::Client
|
|
13
21
|
# @rbs return: void
|
|
14
22
|
def initialize(client:)
|
|
15
23
|
@client = client
|
|
16
24
|
@session_id = nil
|
|
17
25
|
@buffered = []
|
|
26
|
+
@lock = Mutex.new
|
|
18
27
|
end
|
|
19
28
|
|
|
29
|
+
# A request to the client names its session, so nothing can be relayed
|
|
30
|
+
# until the agent sets the id.
|
|
20
31
|
# @rbs return: Set[Symbol]
|
|
21
32
|
def capabilities
|
|
22
|
-
CAPABILITIES
|
|
33
|
+
@session_id ? CAPABILITIES : BUILDING_CAPABILITIES
|
|
23
34
|
end
|
|
24
35
|
|
|
25
36
|
# @rbs question: String?
|
|
@@ -27,23 +38,41 @@ class Riffer::Rig::ACP::Host
|
|
|
27
38
|
# @rbs secret: bool
|
|
28
39
|
# @rbs return: String?
|
|
29
40
|
def ask(question = nil, options: nil, secret: false)
|
|
30
|
-
|
|
41
|
+
id = @session_id
|
|
42
|
+
# ACP forbids asking for a secret in a form elicitation, and rig serves no
|
|
43
|
+
# URL for the URL mode to open.
|
|
44
|
+
return super unless id && !secret
|
|
45
|
+
return elicit(id, question.to_s) unless options
|
|
46
|
+
|
|
47
|
+
selected = permit(id, question.to_s, Riffer::Rig::ACP::Mapper.choices(options))
|
|
48
|
+
selected if options.include?(selected)
|
|
31
49
|
end
|
|
32
50
|
|
|
33
51
|
# @rbs question: String?
|
|
34
52
|
# @rbs return: bool
|
|
35
|
-
def confirm(
|
|
36
|
-
|
|
53
|
+
def confirm(question = nil)
|
|
54
|
+
id = @session_id
|
|
55
|
+
return super unless id
|
|
56
|
+
|
|
57
|
+
permit(id, question.to_s, Riffer::Rig::ACP::Mapper::CONFIRM_OPTIONS) == Riffer::Rig::ACP::Mapper::CONFIRMED
|
|
37
58
|
end
|
|
38
59
|
|
|
39
60
|
# @rbs message: String?
|
|
40
61
|
# @rbs level: Symbol
|
|
41
62
|
# @rbs return: void
|
|
42
63
|
def notify(message = nil, level: :info)
|
|
43
|
-
|
|
44
|
-
|
|
64
|
+
update(Riffer::Rig::ACP::Mapper.notice(message.to_s))
|
|
65
|
+
end
|
|
45
66
|
|
|
46
|
-
|
|
67
|
+
# @rbs update: ::ACP::Types::SessionUpdate::t
|
|
68
|
+
# @rbs return: void
|
|
69
|
+
def update(update)
|
|
70
|
+
# A job's exit reaches here on the job's own thread, racing session_id= for
|
|
71
|
+
# the buffer.
|
|
72
|
+
@lock.synchronize do
|
|
73
|
+
id = @session_id
|
|
74
|
+
id ? @client.update(id, update) : @buffered << update
|
|
75
|
+
end
|
|
47
76
|
end
|
|
48
77
|
|
|
49
78
|
# @rbs label: String?
|
|
@@ -61,23 +90,37 @@ class Riffer::Rig::ACP::Host
|
|
|
61
90
|
# @rbs id: String
|
|
62
91
|
# @rbs return: void
|
|
63
92
|
def session_id=(id)
|
|
64
|
-
@
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
93
|
+
@lock.synchronize do
|
|
94
|
+
@session_id = id
|
|
95
|
+
@buffered.each { |update| @client.update(id, update) }
|
|
96
|
+
@buffered = []
|
|
97
|
+
end
|
|
68
98
|
end
|
|
69
99
|
|
|
70
100
|
private
|
|
71
101
|
|
|
72
102
|
# @rbs id: String
|
|
73
|
-
# @rbs
|
|
74
|
-
# @rbs
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
103
|
+
# @rbs question: String
|
|
104
|
+
# @rbs options: Array[::ACP::Types::PermissionOption]
|
|
105
|
+
# @rbs return: String?
|
|
106
|
+
def permit(id, question, options)
|
|
107
|
+
# An adopting connection can replace @client while the question is out, and
|
|
108
|
+
# only the client that was asked knows the tool call to close.
|
|
109
|
+
client = @client
|
|
110
|
+
# A permission request must name a tool call, and a host question has none.
|
|
111
|
+
call_id = SecureRandom.uuid
|
|
112
|
+
client.update(id, Riffer::Rig::ACP::Mapper.permission_call(call_id, question))
|
|
113
|
+
request = Riffer::Rig::ACP::Mapper.permission_request(id, call_id, question, options)
|
|
114
|
+
selected = Riffer::Rig::ACP::Mapper.selected_option(client.request_permission(request))
|
|
115
|
+
client.update(id, Riffer::Rig::ACP::Mapper.permission_done(call_id, selected))
|
|
116
|
+
selected
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# @rbs id: String
|
|
120
|
+
# @rbs question: String
|
|
121
|
+
# @rbs return: String?
|
|
122
|
+
def elicit(id, question)
|
|
123
|
+
request = Riffer::Rig::ACP::Mapper.elicitation_request(id, question)
|
|
124
|
+
Riffer::Rig::ACP::Mapper.elicited_answer(@client.create_elicitation(request))
|
|
82
125
|
end
|
|
83
126
|
end
|