Skip to content

feat: add Google Gemini as OpenAI-compatible API provider#1002

Merged
PeterDaveHello merged 1 commit into
ChatGPTBox-dev:masterfrom
PeterDaveHello:feat/add-google-gemini-api-provider
Jul 14, 2026
Merged

feat: add Google Gemini as OpenAI-compatible API provider#1002
PeterDaveHello merged 1 commit into
ChatGPTBox-dev:masterfrom
PeterDaveHello:feat/add-google-gemini-api-provider

Conversation

@PeterDaveHello

@PeterDaveHello PeterDaveHello commented Jul 13, 2026

Copy link
Copy Markdown
Member

Add Google as a built-in OpenAI-compatible API provider using https://generativelanguage.googleapis.com/v1beta/openai/ endpoint.

Default models:

  • Gemini 3.1 Pro (Preview)
  • Gemini 3.5 Flash
  • Gemini 3 Flash (Preview)
  • Gemini 2.5 Pro
  • Gemini 2.5 Flash
  • Gemini 2.5 Flash-Lite

Uses the shared OpenAI-compatible Bearer authentication path and supports legacy resolution for configured Google preset keys.

Ref:

Summary by CodeRabbit

  • New Features
    • Added support for Google Gemini models via the Google API.
    • Introduced six new Gemini model options, including Pro, Flash, and Flash Lite variants.
    • Added Google API key configuration and Google provider recognition.
    • Updated routing so Google API model sessions use the existing OpenAI-compatible connection flow.
  • Tests
    • Added unit coverage for Google model-to-provider resolution behavior.

@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Google Gemini API models are added to configuration, provider mappings, the built-in provider registry, and provider-resolution tests. Google API model sessions are classified as OpenAI-compatible so background execution uses the existing OpenAI-compatible generator.

Changes

Google API integration

Layer / File(s) Summary
Google API model contracts
src/config/index.mjs
Adds Google API model keys, six Gemini model definitions, a Google API model group, the googleApiKey default, default active models, and model detection.
Google provider wiring and validation
src/config/openai-provider-mappings.mjs, src/services/apis/provider-registry.mjs, tests/unit/services/apis/provider-registry.test.mjs
Maps Google credentials and model groups to the google provider, adds its endpoint template, resolves legacy Google presets, and tests preset resolution versus raw Gemini IDs.
OpenAI-compatible background routing
src/background/index.mjs
Classifies Google API model sessions as OpenAI-compatible and routes them through the existing OpenAI-compatible answer generator.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant executeApi
  participant isUsingOpenAICompatibleApiSession
  participant generateAnswersWithOpenAICompatibleApi
  executeApi->>isUsingOpenAICompatibleApiSession: evaluate Google API model session
  isUsingOpenAICompatibleApiSession->>executeApi: return true
  executeApi->>generateAnswersWithOpenAICompatibleApi: generate answers for Google API model
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main change: adding Google Gemini as an OpenAI-compatible API provider.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Add Google Gemini as a built-in OpenAI-compatible API provider

✨ Enhancement ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

AI Description

• Add a built-in Google provider targeting the Gemini OpenAI-compatible endpoint.
• Introduce Google API model group, default Gemini models, and config key storage.
• Support legacy "gemini" preset/model-name resolution for provider selection.
Diagram

graph TD
A["Background: executeApi"] --> B["Config: model groups"] --> C["Provider registry"] --> D["Google provider"] --> E[("Gemini OpenAI endpoint")]
C --> F["Provider mappings"]
subgraph Legend
direction LR
_svc([Module]) ~~~ _cfg["Config data"] ~~~ _ext{{External API}}
end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Model-only integration via existing OpenRouter/AIML routes
  • ➕ No new provider registry/config key needed
  • ➕ Avoids provider-specific auth and endpoint differences
  • ➖ Routes traffic through a third party instead of direct Google endpoint
  • ➖ Harder to support Google-specific auth and legacy 'gemini' preset behavior
2. Treat Google as a custom provider template instead of built-in
  • ➕ Less core code surface area; provider can be user-configured
  • ➕ Avoids committing to a fixed Google endpoint/version
  • ➖ Worse UX: user must configure base URL and API key field mapping manually
  • ➖ Harder to support legacy model-name resolution and curated default models

Recommendation: The built-in provider approach is appropriate because Google’s OpenAI-compatible endpoint is stable enough to warrant first-class UX, and legacy preset resolution + dedicated API key storage are difficult to replicate cleanly with custom providers. Consider a follow-up to implement/verify Google-specific auth handling (API key as query parameter) in the request builder if it isn’t already supported elsewhere, since the core OpenAI-compatible helper currently prefers Bearer auth headers.

Files changed (4) +57 / -0

Enhancement (2) +12 / -0
index.mjsInclude Google models in OpenAI-compatible session detection +2/-0

Include Google models in OpenAI-compatible session detection

• Imports isUsingGoogleApiModel and adds it to isUsingOpenAICompatibleApiSession(), ensuring Google Gemini sessions take the OpenAI-compatible execution path.

src/background/index.mjs

provider-registry.mjsRegister built-in Google provider and legacy gemini preset resolution +10/-0

Register built-in Google provider and legacy gemini preset resolution

• Adds a built-in 'google' provider pointing at https://generativelanguage.googleapis.com/v1beta/openai with the chat completions path. Updates legacy model-name preset resolution to map 'googleGemini*', 'gemini', and 'googleApiModelKeys' presets to the Google provider.

src/services/apis/provider-registry.mjs

Other (2) +45 / -0
index.mjsAdd Google model group, models, and config defaults +43/-0

Add Google model group, models, and config defaults

• Defines googleApiModelKeys and registers the group in ModelGroups. Adds Gemini model entries to Models, introduces googleApiKey in defaultConfig, and includes Google models in the default auto model list. Exposes isUsingGoogleApiModel() helper for session/config checks.

src/config/index.mjs

openai-provider-mappings.mjsMap Google provider to its API key field and model group +2/-0

Map Google provider to its API key field and model group

• Adds providerId→apiKey-field mapping for googleApiKey and links googleApiModelKeys to provider id 'google' for OpenAI-compatible provider resolution.

src/config/openai-provider-mappings.mjs

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds support for Google Gemini models via the OpenAI-compatible API endpoint. It introduces Google-specific configuration keys, API key management, model definitions (including Gemini 3.1, 3.5, and 2.5 variants), and registers Google as a built-in provider with its base URL. I have no feedback to provide as there are no review comments.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread src/services/apis/provider-registry.mjs
@kilo-code-bot

kilo-code-bot Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 0
Files Reviewed (5 files)
  • src/background/index.mjs - 0 issues
  • src/config/index.mjs - 0 issues
  • src/config/openai-provider-mappings.mjs - 0 issues
  • src/services/apis/provider-registry.mjs - 0 issues (previous query-param auth WARNING resolved: Google uses Bearer auth, which is correct for generativelanguage.googleapis.com/v1beta/openai; see openai-compatible-core.mjs:12)
  • tests/unit/services/apis/provider-registry.test.mjs - 0 issues
Resolution Notes
  • The prior review flagged that Google auth used Bearer instead of a ?key= query parameter. After the PR rewrite, this is the intentional design and is correct: Google's OpenAI-compatible endpoint accepts Authorization: Bearer. The warning is resolved.
  • Note: defaultActiveModels enables only googleGemini3_1Pro and googleGemini3_5Flash; all six model presets are still available as selectable providers. This is a design choice, not a defect.
Previous Review Summary (commit 2101379)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit 2101379)

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
src/services/apis/provider-registry.mjs 76 PR description claims Google query-param auth is implemented, but no such handling exists; the OpenAI-compatible request builder always sends Authorization: Bearer ${apiKey} and the URL has no ?key= parameter. If Google's endpoint rejects Bearer auth, the provider will fail to authenticate.
Files Reviewed (4 files)
  • src/background/index.mjs - 0 issues
  • src/config/index.mjs - 0 issues
  • src/config/openai-provider-mappings.mjs - 0 issues
  • src/services/apis/provider-registry.mjs - 1 issue

Reviewed by hy3:free · Input: 60.6K · Output: 7.5K · Cached: 228.4K

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds Google Gemini as a first-class OpenAI-compatible (chat/completions-style) API provider in the extension’s provider/model selection system, wiring it into the existing OpenAI-compatible provider registry and API-mode routing.

Changes:

  • Register a new built-in OpenAI-compatible provider (google) and map legacy “gemini” presets to it.
  • Add Google API model group + model definitions, plus a new googleApiKey config field.
  • Include Google API-mode sessions in the background’s “OpenAI-compatible API session” detection.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
src/services/apis/provider-registry.mjs Adds the built-in google provider and legacy preset→provider resolution.
src/config/openai-provider-mappings.mjs Maps google to googleApiKey and links the googleApiModelKeys group to provider id google.
src/config/index.mjs Defines Google model keys/models, adds googleApiKey default, and includes Google models in default active API modes.
src/background/index.mjs Routes Google API-mode sessions through the OpenAI-compatible API path.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/services/apis/provider-registry.mjs
Comment thread src/config/index.mjs
@qodo-code-review

qodo-code-review Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Legacy Gemini model truncated ✓ Resolved 🐞 Bug ≡ Correctness
Description
Legacy sessions with a modelName like gemini-2.5-pro are now mapped to the new google provider,
but model resolution treats hyphenated names as “preset-custom” and strips the gemini- prefix,
sending 2.5-pro instead. This can produce invalid model identifiers for the Google
OpenAI-compatible endpoint and cause requests to fail for those legacy sessions.
Code

src/services/apis/provider-registry.mjs[R122-123]

+  if (preset.startsWith('googleGemini') || preset === 'gemini' || preset === 'googleApiModelKeys')
+    return 'google'
Evidence
The PR introduces routing of gemini-* legacy presets to the google provider, but the existing
model-name conversion logic strips the part before the first hyphen for any “custom” (hyphenated)
modelName. Since the newly added Google models use full identifiers like gemini-2.5-pro, a legacy
modelName of that form would be transformed into 2.5-pro before being sent.

src/services/apis/provider-registry.mjs[98-124]
src/utils/model-name-convert.mjs[31-51]
src/services/apis/openai-api.mjs[19-31]
src/services/apis/openai-api.mjs[289-316]
src/config/index.mjs[620-642]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A legacy modelName such as `gemini-2.5-pro` is now routed to provider `google`, but the shared model-name conversion interprets any hyphenated modelName as a custom preset and returns only the substring after the first `-`. That turns `gemini-2.5-pro` into `2.5-pro`, which is inconsistent with the configured Google model values (which include the `gemini-` prefix).

## Issue Context
- Provider routing for legacy modelName presets was expanded to include `preset === 'gemini'`.
- The OpenAI-compatible call path uses `resolveModelName()` → `getModelValue()`.
- `getModelValue()` ultimately uses `modelNameToValue()`, which strips the prefix for hyphenated names.

## Fix Focus Areas
- src/services/apis/provider-registry.mjs[98-124]
- src/services/apis/openai-api.mjs[19-31]
- src/services/apis/openai-api.mjs[289-316]
- src/utils/model-name-convert.mjs[31-51]

## Suggested fix
In the OpenAI-compatible entrypoint (where `request.providerId` is known), special-case legacy Gemini value-form model names when providerId resolves to `google` and `session.apiMode` is absent:
- If `session.modelName` starts with `gemini-`, use `session.modelName` verbatim as the `model` sent to the provider (do not run it through `getModelValue()`), preventing the prefix from being dropped.
- Keep existing behavior for all configured model keys (e.g., `googleGemini2_5Pro`) and other providers.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment thread src/services/apis/provider-registry.mjs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 210137921a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/services/apis/provider-registry.mjs Outdated
Register Google as a built-in provider using the Gemini
OpenAI-compatible endpoint. Add curated Gemini model presets, provider
credential mapping, and background routing through the shared API path.

Reuse supported Bearer authorization so API keys stay out of request
URLs. Limit legacy resolution to configured Google preset keys so raw
model IDs are not truncated by custom model parsing.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds support for Google Gemini models as a built-in provider using the OpenAI-compatible endpoint. It introduces Google API key configuration, model definitions, provider mapping, and associated unit tests. However, the reviewer pointed out that several of the added Gemini model IDs (such as Gemini 3.1, 3.5, and 2.5) are hallucinated and do not exist in the actual Google API. Feedback has been provided to replace these with valid Gemini models (such as Gemini 1.5 and 2.0) across the configuration, default active models, and unit tests to prevent API errors.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread src/config/index.mjs
Comment on lines +182 to +189
export const googleApiModelKeys = [
'googleGemini3_1Pro',
'googleGemini3_5Flash',
'googleGemini3Flash',
'googleGemini2_5Pro',
'googleGemini2_5Flash',
'googleGemini2_5FlashLite',
]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The Google Gemini API does not have models named Gemini 3.1, 3.5, or 2.5. These appear to be hallucinated model names. The actual current Gemini models available via the API are Gemini 1.5 Pro, Gemini 1.5 Flash, Gemini 2.0 Flash, Gemini 2.0 Flash-Lite, and Gemini 2.0 Pro. Using the hallucinated model IDs will result in API errors (e.g., 404 or 400 Bad Request).

export const googleApiModelKeys = [
  'googleGemini1_5Pro',
  'googleGemini1_5Flash',
  'googleGemini2_0Flash',
  'googleGemini2_0FlashLite',
  'googleGemini2_0Pro',
]

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These model IDs are current and documented by Google. Gemini 3.1, 3.5, 3 Flash, and 2.5 models are available, while Gemini 2.0 was shut down on June 1, 2026. No change is needed: https://ai.google.dev/gemini-api/docs/models

Comment thread src/config/index.mjs
Comment on lines +620 to +643
googleGemini3_1Pro: {
value: 'gemini-3.1-pro-preview',
desc: 'Google (Gemini 3.1 Pro Preview)',
},
googleGemini3_5Flash: {
value: 'gemini-3.5-flash',
desc: 'Google (Gemini 3.5 Flash)',
},
googleGemini3Flash: {
value: 'gemini-3-flash-preview',
desc: 'Google (Gemini 3 Flash Preview)',
},
googleGemini2_5Pro: {
value: 'gemini-2.5-pro',
desc: 'Google (Gemini 2.5 Pro)',
},
googleGemini2_5Flash: {
value: 'gemini-2.5-flash',
desc: 'Google (Gemini 2.5 Flash)',
},
googleGemini2_5FlashLite: {
value: 'gemini-2.5-flash-lite',
desc: 'Google (Gemini 2.5 Flash-Lite)',
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

Replace the hallucinated Gemini model IDs and descriptions with the actual existing Gemini models supported by the Google API.

Suggested change
googleGemini3_1Pro: {
value: 'gemini-3.1-pro-preview',
desc: 'Google (Gemini 3.1 Pro Preview)',
},
googleGemini3_5Flash: {
value: 'gemini-3.5-flash',
desc: 'Google (Gemini 3.5 Flash)',
},
googleGemini3Flash: {
value: 'gemini-3-flash-preview',
desc: 'Google (Gemini 3 Flash Preview)',
},
googleGemini2_5Pro: {
value: 'gemini-2.5-pro',
desc: 'Google (Gemini 2.5 Pro)',
},
googleGemini2_5Flash: {
value: 'gemini-2.5-flash',
desc: 'Google (Gemini 2.5 Flash)',
},
googleGemini2_5FlashLite: {
value: 'gemini-2.5-flash-lite',
desc: 'Google (Gemini 2.5 Flash-Lite)',
},
googleGemini1_5Pro: {
value: 'gemini-1.5-pro',
desc: 'Google (Gemini 1.5 Pro)',
},
googleGemini1_5Flash: {
value: 'gemini-1.5-flash',
desc: 'Google (Gemini 1.5 Flash)',
},
googleGemini2_0Flash: {
value: 'gemini-2.0-flash',
desc: 'Google (Gemini 2.0 Flash)',
},
googleGemini2_0FlashLite: {
value: 'gemini-2.0-flash-lite-preview',
desc: 'Google (Gemini 2.0 Flash-Lite Preview)',
},
googleGemini2_0Pro: {
value: 'gemini-2.0-pro-exp',
desc: 'Google (Gemini 2.0 Pro Experimental)',
},

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These definitions match the current official model IDs. Replacing them with Gemini 1.5 or 2.0 models would introduce outdated or unavailable entries: https://ai.google.dev/gemini-api/docs/deprecations

Comment thread src/config/index.mjs
Comment on lines +751 to +752
'googleGemini3_1Pro',
'googleGemini3_5Flash',

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

Update the default active API modes to use the corrected Gemini 1.5 Pro and Gemini 1.5 Flash model keys.

Suggested change
'googleGemini3_1Pro',
'googleGemini3_5Flash',
'googleGemini1_5Pro',
'googleGemini1_5Flash',

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The current defaults intentionally use available Gemini 3.x models. The suggested Gemini 1.5 replacements are outdated, so no change is needed.

Comment on lines +44 to +51
test('resolveProviderIdForSession resolves legacy Google preset keys', () => {
assert.equal(resolveProviderIdForSession({ modelName: 'googleGemini2_5Flash' }), 'google')
assert.equal(resolveProviderIdForSession({ modelName: 'googleApiModelKeys-custom' }), 'google')
})

test('resolveProviderIdForSession does not treat raw Gemini model IDs as legacy presets', () => {
assert.equal(resolveProviderIdForSession({ modelName: 'gemini-2.5-flash' }), null)
})

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Update the test cases to use the corrected Gemini model names for consistency and clarity.

Suggested change
test('resolveProviderIdForSession resolves legacy Google preset keys', () => {
assert.equal(resolveProviderIdForSession({ modelName: 'googleGemini2_5Flash' }), 'google')
assert.equal(resolveProviderIdForSession({ modelName: 'googleApiModelKeys-custom' }), 'google')
})
test('resolveProviderIdForSession does not treat raw Gemini model IDs as legacy presets', () => {
assert.equal(resolveProviderIdForSession({ modelName: 'gemini-2.5-flash' }), null)
})
test('resolveProviderIdForSession resolves legacy Google preset keys', () => {
assert.equal(resolveProviderIdForSession({ modelName: 'googleGemini1_5Flash' }), 'google')
assert.equal(resolveProviderIdForSession({ modelName: 'googleApiModelKeys-custom' }), 'google')
})
test('resolveProviderIdForSession does not treat raw Gemini model IDs as legacy presets', () => {
assert.equal(resolveProviderIdForSession({ modelName: 'gemini-1.5-flash' }), null)
})

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The test values match the configured current model keys and IDs. Changing them to Gemini 1.5 would make the tests inconsistent with the supported model configuration.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.

@qodo-code-review

Copy link
Copy Markdown
Contributor

Code review by qodo was updated up to the latest commit b2f4173

@PeterDaveHello PeterDaveHello merged commit 8ba0e30 into ChatGPTBox-dev:master Jul 14, 2026
4 checks passed
@PeterDaveHello PeterDaveHello deleted the feat/add-google-gemini-api-provider branch July 14, 2026 18:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants