Repository navigation
What's Changed
- Action prompt to generation provider response pipeline by @TonsOfFun in #1
- Fix gemspec for Rails versions 7.2 to 8.x by @geetfun in #2
- Agent requested actions prompt/response by @TonsOfFun in #19
- Improving the first time developer exeperience by @TonsOfFun in #31
- Fixes rails generate active_agent:install by @swinner2 in #34
- Remove gemfile require by @swinner2 in #37
- Streaming vision by @TonsOfFun in #36
- Streaming actions by @TonsOfFun in #40
- Bump anthropic from 0.3.2 to 0.4.1 by @dependabot[bot] in #43
- Bump ruby-openai from 7.1.0 to 8.1.0 by @dependabot[bot] in #45
- Bump standard from 1.47.0 to 1.49.0 by @dependabot[bot] in #44
- Fix broken generators by @khasinski in #47
- Add Ollama support by @khasinski in #46
- Add OpenRouter support by @khasinski in #48
- Bump webmock from 3.25.0 to 3.25.1 by @dependabot[bot] in #50
- feat: support YAML aliases in configuration by @palkan in #53
- Proper docs with some neat new updates and refactors by @TonsOfFun in #54
- Fix opnai typo in Getting Started docs. by @t2 in #61
- Prevent warning in InstallGeneratorTest by @andyw8 in #66
- Adjust PLATFORMS in Gemfile.lock by @andyw8 in #65
- Fix typo in action-prompt.md by @yatish27 in #67
- Update generator USAGE with full generator name by @andycandrea in #80
- Generator usage cleanup by @postpostmodern in #79
- Testing prompt examples for doc snippets by @TonsOfFun in #77
- Bump sqlite3 from 2.6.0 to 2.7.2 by @dependabot[bot] in #78
- Allow to use templates for instructions by @lHydra in #90
- json template files added back into generator by @hannaengel in #81
- lazy instructions generation by @lHydra in #101
- Skip missing JSON templates by @otrub in #88
- Bump actions/configure-pages from 4 to 5 by @dependabot[bot] in #60
- Adding gem load rescue for better error messages by @TonsOfFun in #97
- Move rails gem to development dependencies by @dzunk in #107
- Override-options by @TonsOfFun in #113
- fix action schemas generation for user actions by @lHydra in #115
- Multimodal Responses API image/pdf analysis support tested by @TonsOfFun in #127
- Fix gemspec
filesreferences by @marcoroth in #129 - docs: Fix typo in
objectby @marcoroth in #128 - Add
rake testtask by @marcoroth in #130 - Consistently use double quotes in
ApplicationAgenttemplate by @marcoroth in #133 - Add Active Agent dark mode logo on docs page by @marcoroth in #134
- Updating providers to support base client configs with active_agent.yml by @TonsOfFun in #143
- Enhancing generators for skip config and format options by @TonsOfFun in #142
- fix generation callbacks by @lHydra in #138
- Bump puma from 6.6.0 to 6.6.1 by @dependabot[bot] in #151
- AnthropicProvider new API and minor fix by @nicolangr in #150
- Adding data extraction example with output to docs by @TonsOfFun in #131
- Fix Secrets Sanitizing by @sirwolfgang in #156
- Updating tool calling docs by @TonsOfFun in #162
- Updating callback tests and examples for around_generation docs by @TonsOfFun in #161
- Feature: Agent generator adds instructions view to agents view directory by @zhephyn in #163
- Update message_json extraction logic in OpenAI provider by @otrub in #164
- Anthropic tool usage by @nicolangr in #155
- Update getting-started.md by @nickhammond in #173
- Refactoring generation provider-adapter interface by @TonsOfFun in #168
- Bump jbuilder from 2.13.0 to 2.14.1 by @dependabot[bot] in #172
- Bump actions/checkout from 4 to 5 by @dependabot[bot] in #169
- Updating docs and examples for supported providers by @TonsOfFun in #188
- Updating gemspec and dev deps by @TonsOfFun in #189
- Relax required Rails version and upgrade CI configs by @palkan in #191
- Fix inflections by @palkan in #192
- Structured-output-params by @TonsOfFun in #194
- Fix OpenRouter Routing structured outputs and files with required_parameters by @sirwolfgang in #190
- Fix ruby-openai gem constraint by @travisdock in #199
- Refactoring tests that used ostruct to use Data classes instead by @TonsOfFun in #202
- Ensuring openrouter headers are being set properly by @TonsOfFun in #204
- Merged mulititurn into openrouter headers by @TonsOfFun in #207
- Prevent agent class options mutation by @palkan in #211
- Browser use agent example by @TonsOfFun in #215
- Openai mcp builtin tools by @TonsOfFun in #216
- added ollama embeddigs parameters for nomic-embed-text by @nicolangr in #214
- Bump actions/upload-pages-artifact from 3 to 4 by @dependabot[bot] in #213
- Model schemas and structured output enhancements by @TonsOfFun in #221
- Bump actions/setup-node from 4 to 5 by @dependabot[bot] in #226
- Fix: Error when template_builder is overwritten by @Tonksthebear in #232
- Fix typo in message templates section by @skovy in #237
- Major Framework Refactor: ActiveAgent v1.0.0 by @sirwolfgang in #259
- Add API gem version testing and fix Anthropic 1.14.0 compatibility by @sirwolfgang in #265
- Fix version compatiblity issue for vitepress by @sirwolfgang in #266
- Add missing API Keys by @sirwolfgang in #267
- Fix website links by @sirwolfgang in #268
- chore: remove
standardfrom dev dependencies by @okuramasafumi in #272 - Add thread safety tests by @sirwolfgang in #275
- Refactor: Leverage Native Gem Types Across All Providers by @sirwolfgang in #271
- Improved Usage Tracking by @sirwolfgang in #274
- Universal Tools & MCP Support by @sirwolfgang in #278
- Bump actions/download-artifact from 4 to 6 by @dependabot[bot] in #283
- Bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in #282
- Bump actions/checkout from 5 to 6 by @dependabot[bot] in #280
- Update rails requirement from ~> 8.0.0 to ~> 8.1.1 by @dependabot[bot] in #270
- Bump actions/setup-node from 5 to 6 by @dependabot[bot] in #242
- Bump actions/setup-node from 5 to 6 by @dependabot[bot] in #288
- Handle message when the role is developer when using OpenAI provider with instructions by @gokul-312 in #290
- Fix 404 - Update link for Getting Started Guide in README by @timsco in #294
- Fix CI failing due to relative BUNDLE_GEMFILE path by @khasinski in #297
- Add documentation for running tests and configuring API keys by @TheRealNeil in #300
- Add Azure OpenAI provider with configuration options and tests by @TheRealNeil in #301
- Fix Anthropic streaming and empty tool input errors by @mattwebbio in #299
- Get the docs to ship by @superconductor-for-github[bot] in #302
- Prevent leaking parent provider config by discarding inherited options for different services by @TheRealNeil in #312
- Cast message to MessageType before creating StreamChunk in stream_broadcaster by @TheRealNeil in #311
- Add direct host/base_url support for Azure OpenAI by @TonsOfFun in #303
- Fix-ollama-provider-stream-completion by @TonsOfFun in #318
- Improve exception handling and add class-level handler for GenerationJob by @TonsOfFun in #320
- Add RubyLLM provider for unified multi-provider LLM access by @khasinski in #317
- Add AWS Bedrock provider by @Davidslv in #316
- Bump actions/upload-artifact from 5 to 6 by @dependabot[bot] in #291
- Bump actions/download-artifact from 6 to 7 by @dependabot[bot] in #292
- Create Foundations for Active Prompt Engine + Contributing MD by @Josiassejod1 in #263
- Bump actions/download-artifact from 7 to 8 by @dependabot[bot] in #323
- Bump actions/upload-artifact from 6 to 7 by @dependabot[bot] in #322
- Add Gemini provider support by @aoki-ryusei in #324
- Bump actions/deploy-pages from 4 to 5 by @dependabot[bot] in #325
- feat: add telemetry engine for distributed tracing by @TonsOfFun in #326
- Fix handling of :document shorthand in OpenAI Chat transforms (PDF Attachements) by @TheRealNeil in #332
- Fix Rails main compatibility: replace removed
find_templatewithfindby @TonsOfFun with @Copilot in #341 - add anthropic json schema support by @aoki-ryusei in #339
- Fix: Mock provider raises UnknownAttributeError when response_format is passed by @aoki-ryusei in #342
- feat: add Requesty as an OpenAI-compatible provider by @Thibaultjaigu in #338
- Fix OpenAI Chat stream: prevent tool_calls[].type becoming "functionf… by @plusor in #296
- upgrade anthropic to v1.55 with native structured output support by @sirwolfgang in #343
- Make the dashboard engine (local dev console) work out of the box by @TonsOfFun in #344
- Add provider error taxonomy, model capabilities gating, and telemetry fixes by @TonsOfFun in #350
- Simplify dashboard install and make engine mount path configurable by @TonsOfFun in #351
- Extract the dashboard into the actionagent gem, with feature parity by @TonsOfFun in #353
- One expandable-object design for traces, spans and interactions (into #353) by @TonsOfFun in #354
- Add auto-detected Tools and MCP Services views to the dashboard (into #354) by @TonsOfFun in #355
- fix(actionagent): install and mount cleanly on MySQL and acronym hosts by @TonsOfFun in #359
- Agent-as-tool delegation as a core primitive by @TonsOfFun in #360
- fix(actionagent): resolve every engine constant under a host's inflections by @TonsOfFun in #361
- fix: record token usage for streaming generations by @TonsOfFun in #362
- fix(actionagent): register observed agents when a trace is ingested by @TonsOfFun in #363
- Document SolidAgent, and test the two repos together by @TonsOfFun in #364
- Fix the docs deploy: a colon in a test name breaks artifact upload by @TonsOfFun in #365
- Release activeagent 1.3.0 by @TonsOfFun in #366
- fix: record the user turn an agent renders from its template by @TonsOfFun in #367
- Release activeagent 1.3.1 by @TonsOfFun in #369
- refactor(actionagent): spell the MCP constants with the MCP acronym by @TonsOfFun in #368
- fix: load RubyLLM when the gem registers its acronym by @aoki-ryusei in #372
- feat: pin RubyLLM's backend with a platform option by @TonsOfFun in #374
- Stop average_score raising on comparison evaluation runs by @TonsOfFun in #399
- Correct the average_score comments flagged in review of #399 by @TonsOfFun in #401
- Dashboard review follow-ups: engine correctness, credentials, MCP, telemetry bodies, DX by @TonsOfFun in #402
- Add scenario suite evaluations with multi-model comparison by @TonsOfFun in #407
- feat: agent evaluations — scenario suites, model comparison, fault diagnosis by @TonsOfFun in #406
- Add APM-style Metrics dashboard with time-series charts and golden signals by @TonsOfFun in #409
- Finish the suite results view, the APM Metrics page and the report by @TonsOfFun in #410
- fix(actionagent): fit the run report frame to its content by @TonsOfFun in #411
- fix(actionagent): derive encryption keys before Rails configures the encryptor by @TonsOfFun in #412
- Release activeagent 1.4.0 and actionagent 1.3.0 by @TonsOfFun in #413
- fix(evals): preserve grades, import suites, and publish reports by @TonsOfFun in #414
- Add dashboard evaluation assistant and reviewable agent drafts by @TonsOfFun in #415
- Add conversation workbench to Run Agent page by @TonsOfFun in #405
- feat(dashboard): call a host's MCP tools instead of only describing them by @TonsOfFun in #420
- Release 1.5.0 back to main by @TonsOfFun in #432
- fix(evals): name the model of a spec hash rather than stringifying it by @TonsOfFun in #430
- chore(release): activeagent 1.5.1 by @TonsOfFun in #437
- Stop nil VCR filters flaking replays, and spell the MCP plural by @TonsOfFun in #436
- Schema-derived agent tools: generate a bounded tool roster from an ActiveRecord model by @TonsOfFun in #435
- Surface MCP tool-discovery failures instead of running tool-less and silent by @TonsOfFun in #434
- chore(release): activeagent and actionagent 1.5.2 by @TonsOfFun in #442
- fix(evals): re-run a persisted model selection under the provider it ran under by @TonsOfFun in #444
- feat(schema-tools): define a model's tools at runtime, registered per model by @TonsOfFun in #447
- Carry the caller into agent runs, so agents can authorize like controllers by @TonsOfFun in #443
- feat(evals): name a fabricated answer as a fault, and stop crediting a wrong tool by @TonsOfFun in #445
- docs(changelog): restore the Added entries lost in today's merges by @TonsOfFun in #450
- feat(generators): a schema_tools generator that lists every column, commented out by @TonsOfFun in #446
- feat(delegation): a delegated run inherits its parent's caller by @TonsOfFun in #448
- feat(mcp): serve the host's schema tools through the MCP facade by @TonsOfFun in #449
- feat(evals): a scenario replay runs as the evaluation's owner by @TonsOfFun in #451
- fix(dashboard): the Tools tab reads agent.tools for schema tools, and can change it by @TonsOfFun in #452
- feat(agents): releases — a digest of what the model is given, cut on deploy, pinned to every trace, run and evaluation by @TonsOfFun in #453
- Coerce container-valued query params and scrub handoff state on read by @TonsOfFun in #456
- chore(release): activeagent and actionagent 1.6.2 by @TonsOfFun in #455
- Bump actions/setup-node from 6 to 7 by @dependabot[bot] in #348
- chore(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #357
- chore(deps): bump softprops/action-gh-release from 2 to 3 by @dependabot[bot] in #358
- fix: return 405 for unsupported MCP methods by @Ricky-7-Yan in #398
- fix(dashboard): MySQL evaluations, judge memoization, sign-in docs by @TonsOfFun in #454
- fix(test): restore WebMock's reset so leaked stubs stop failing the Pages deploy by @TonsOfFun in #459
- feat(telemetry): size tool schemas on the prompt span by @TonsOfFun in #458
- fix(dashboard): meter adapted replays, validate providers, keep dropped scenarios by @TonsOfFun in #460
- feat(evals): correlate evaluation traces with the result that caused them by @TonsOfFun in #465
- feat(evals): tell a judge block which call it is serving by @TonsOfFun in #468
- feat(dashboard): give Agent a generations association by @TonsOfFun in #469
- docs(evals): metering, provider validation and on_removed for host adapters by @TonsOfFun in #466
- chore(release): activeagent and actionagent 1.6.3 by @TonsOfFun in #457
- Rebuild Evaluations page around runs with detailed history and scoring by @TonsOfFun in #471
- docs: add the Dashboard for RubyLLM Apps guide by @TonsOfFun in #472
- feat: let the engine run host agent classes, and teach SchemaTools about Rails enums by @TonsOfFun in #467
- Fix direct generate_later jobs, dashboard CSRF, model picker, builder errors and missing provider gems by @TonsOfFun in #475
- Give hosts a seam onto the engine's models and controllers by @TonsOfFun in #474
- feat: allowed_tools and require_approval for MCP servers (lands #328) by @TonsOfFun in #476
- Read an observed agent's own traces in its criteria, tabs and markers by @TonsOfFun in #481
- Tell a publisher's caller what the collector refused and whether to retry by @TonsOfFun in #480
- Collect published evaluation reports at /api/evaluation_reports by @TonsOfFun in #485
- chore(release): activeagent and actionagent 1.7.0 by @TonsOfFun in #490
- Testable Ollama hosts, a model comparison table, and a scenario expectation fix by @TonsOfFun in #499
- docs: add Requesty to the README install instructions by @Thibaultjaigu in #504
- Fix RubyLLM tool-call replay and structured output; require ruby_llm 1.x by @yorzi in #503
- Let a publisher verify its collector before a run by @TonsOfFun in #497
- Evaluation and telemetry tools on the dashboard's MCP server by @TonsOfFun in #498
- feat(dashboard): pick evaluation models from the provider catalog by @TonsOfFun in #494
- Fix Rails-main CI with RubyLLM 1.16 and 2.x compatibility by @TonsOfFun in #508
- Sandbox experiments for 1.8: per-sandbox databases, model picker, run against a sandbox by @TonsOfFun in #496
- chore(release): activeagent and actionagent 1.8.0 by @TonsOfFun in #500
- Connect GitHub from Settings and boot checkout sandboxes by @TonsOfFun in #479
- Put What to fix after the scenario results in evaluation reports by @TonsOfFun in #513
- Count priced interactions when an evaluation's cost is partly unpriced by @TonsOfFun in #514
- Bring the evaluation report fixes from main into 1.8.1 by @TonsOfFun in #515
- Price every evaluation cost and judge each evaluation by its current run by @TonsOfFun in #516
- Show every evaluation cost on the dashboard and pool the pass rate over current runs by @TonsOfFun in #517
- chore(release): 1.8.1 sandbox code-runner follow-up by @TonsOfFun in #512
- Add a DeepSeek provider, and make
mcps:work on every provider by @sirwolfgang in #507 - chore(changelog): file the MCP bridge and DeepSeek entries under Unreleased by @TonsOfFun in #521
- fix(mcp): land the MCP bridge fixes from #522 on main by @TonsOfFun in #523
- fix(mcp): mark a failed bridged MCP tool call as an error for the model by @TonsOfFun in #529
- fix(providers): name ruby-openai only when it is actually present by @TonsOfFun in #530
- fix(mcp): bound url and command servers by read_timeout by @TonsOfFun in #532
- fix(anthropic): drop the json_object prefill where Claude refuses it by @TonsOfFun in #533
- feat(actionagent): hand a browser run to a person, with the conference-ticket demo and its sample data by @TonsOfFun in #568
- Integrate the 1.9 engine and framework stack: input requests, projects, explorations, browser sessions, session replay, GitHub App by @TonsOfFun in #569
- feat(evals): RubyLLM judge/replay glue and ProviderKey credential helpers for hosts by @TonsOfFun in #473
- refactor(dashboard): shared UI pieces and one route table by @TonsOfFun in #546
- feat(engine): groundwork seams by @TonsOfFun in #547
- fix(providers): use an explicit OpenRouter key before the environment by @TonsOfFun in #548
- fix(dashboard): Session Replay with no recordings and long recordings by @TonsOfFun in #549
- feat(framework): pause a generation for user input by @TonsOfFun in #550
- feat(engine): organization and personal provider keys by @TonsOfFun in #551
- feat(engine): check out sandboxes through GitHub App installations by @TonsOfFun in #552
- feat(engine): recording events and the session timeline by @TonsOfFun in #553
- feat(engine): bootstrap checkouts that do not bundle the engine by @TonsOfFun in #554
- feat(engine): create evaluations and merge scenarios over MCP by @TonsOfFun in #555
- feat(framework): pause on Responses and RubyLLM, approvals, resume_later by @TonsOfFun in #556
- feat(engine): input requests by @TonsOfFun in #557
- feat(engine): open a draft pull request from a sandbox by @TonsOfFun in #558
- feat(dashboard): answer input requests from a needs-input inbox by @TonsOfFun in #559
- feat(engine): projects that boot a repository and evaluate an agent by @TonsOfFun in #560
- feat(engine): browser sessions per sandbox by @TonsOfFun in #561
- feat(dashboard): list sessions and replay them LLM-first by @TonsOfFun in #562
- feat(dashboard): watch a sandbox's browser live and take it over by @TonsOfFun in #563
- feat(dashboard): capture manual agent sessions by @TonsOfFun in #564
- feat(engine): explorations and candidate scenario review by @TonsOfFun in #565
- feat(engine): interactive project setup and the install PR by @TonsOfFun in #566
- feat(engine): the explorer agent walks a project's app and signs in without a model seeing credentials by @TonsOfFun in #567
- docs: use generic examples for evaluation scenarios by @TonsOfFun in #492
- chore(release): activeagent and actionagent 1.9.0 by @TonsOfFun in #520
- Accept the flat json_schema response_format in every provider by @yorzi in #509
- Finish RubyLLM 2.x support: usage, streaming, protocol option by @yorzi in #511
- chore(release): activeagent and actionagent 1.8.2 by @TonsOfFun in #519
- Scenario catalogs and one-click fix prompts: YAML products and sets stored, synced and run from the dashboard; What-to-fix cards copy a Markdown brief by @TonsOfFun in #577
- Implement evaluation fixes with Claude Code in a sandbox, and :sandbox_login by @TonsOfFun in #579
- Answer a remote backend's sign-in errors like the local backend's by @TonsOfFun in #580
- Merge yorzi's four rebased PRs: trace view gaps, standalone catalogs, scenario metadata, scoring leases by @TonsOfFun in #659
- Prevent overlapping evaluation jobs from scoring twice by @yorzi in #614
- Finish the trace view gaps: dark-mode tools and time window, bounded console limit by @yorzi in #635
- Load evaluation catalogs without Rails by @yorzi in #636
- Keep scenario catalog extension fields through export, digests and the dashboard by @yorzi in #637
- Evals in the test suite: test/evals, run on demand, written like tests by @TonsOfFun in #626
- Let dashboard users add and use their own remote MCP servers by @TonsOfFun in #649
- Ranked comparison tables and value pills for the dashboard by @TonsOfFun in #624
- Require Zeitwerk before the dashboard engine reads its inflector by @TonsOfFun in #661
- chore(deps): Update json requirement from < 3 to < 4 by @dependabot[bot] in #582
- Bump actions/setup-node from 4 to 7 by @dependabot[bot] in #581
- chore(deps): Bump docker/setup-buildx-action from 3 to 4 by @dependabot[bot] in #570
- chore(deps): Bump docker/build-push-action from 6 to 7 by @dependabot[bot] in #572
- chore(deps): Bump docker/setup-qemu-action from 3 to 4 by @dependabot[bot] in #573
- chore(deps): Bump docker/login-action from 3 to 4 by @dependabot[bot] in #574
- Claim a pending run before executing it by @yorzi in #664
- Record client-side MCP tool calls in eval replays by @yorzi in #665
- feat: add Atlas Cloud provider by @binyangzhu000-sudo in #352
- Add Cheaper Inference as an OpenAI-compatible provider by @TonsOfFun in #666
- Changelog: Atlas Cloud provider by @TonsOfFun in #668
- Ollama Cloud: cloud host, model lookup, and cloud rates on traces and evals by @TonsOfFun in #670
- Let a suite declare its pass gates per group by @TonsOfFun in #676
- Assert a report's pass gates from TestHelper and RSpec by @TonsOfFun in #682
- Build the regex for a count or a share a scenario expects by @TonsOfFun in #679
- Select scenarios by key strictly, so a misspelled key fails the run by @TonsOfFun in #680
- Skip the judge for a replay that already failed its scenario's expectations by @TonsOfFun in #681
- Replay each scenario a configurable number of trials by @TonsOfFun in #683
- Publish with less glue: run_id from the report, absolute receipt urls, from_env by @TonsOfFun in #684
- Verify a RubyLLM model or judge can be built before a run by @TonsOfFun in #685
- Keep named criteria lists on a suite, layered by key by @TonsOfFun in #686
- Release 1.9.7 by @TonsOfFun in #692
- Name the trial in failure lines, and correct the 1.9.7 eval docs for empty runs by @TonsOfFun in #693
- Hand a verified judge the providers a host has keys for by @TonsOfFun in #694
- Correct two facts in the 1.9.7 changelog by @TonsOfFun in #695
New Contributors
- @geetfun made their first contribution in #2
- @swinner2 made their first contribution in #34
- @dependabot[bot] made their first contribution in #43
- @khasinski made their first contribution in #47
- @t2 made their first contribution in #61
- @andyw8 made their first contribution in #66
- @yatish27 made their first contribution in #67
- @andycandrea made their first contribution in #80
- @postpostmodern made their first contribution in #79
- @lHydra made their first contribution in #90
- @hannaengel made their first contribution in #81
- @otrub made their first contribution in #88
- @dzunk made their first contribution in #107
- @marcoroth made their first contribution in #129
- @nicolangr made their first contribution in #150
- @sirwolfgang made their first contribution in #156
- @zhephyn made their first contribution in #163
- @nickhammond made their first contribution in #173
- @travisdock made their first contribution in #199
- @Tonksthebear made their first contribution in #232
- @skovy made their first contribution in #237
- @okuramasafumi made their first contribution in #272
- @gokul-312 made their first contribution in #290
- @timsco made their first contribution in #294
- @TheRealNeil made their first contribution in #300
- @mattwebbio made their first contribution in #299
- @superconductor-for-github[bot] made their first contribution in #302
- @Davidslv made their first contribution in #316
- @Josiassejod1 made their first contribution in #263
- @aoki-ryusei made their first contribution in #324
- @TonsOfFun with @Copilot made their first contribution in #341
- @Thibaultjaigu made their first contribution in #338
- @plusor made their first contribution in #296
- @Ricky-7-Yan made their first contribution in #398
- @binyangzhu000-sudo made their first contribution in #352
Full Changelog: v1.9.6...v1.9.7