-
Notifications
You must be signed in to change notification settings - Fork 5
feat: file-based provider configuration with SOPS-encrypted secrets #949
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
e84d72d
feat: add file-based provider configuration with SOPS secrets
larryro 05d1682
feat(platform): add nested provider routes with table and detail views
larryro 3667434
feat(platform): improve provider detail UI with dialog-based editing …
larryro ae893eb
feat(cli): integrate SOPS age encryption into CLI lifecycle
larryro eced629
feat(platform): seed builtin provider configs in Docker image
larryro 8970291
refactor(platform): eliminate .sops.yaml, derive public key from SOPS…
larryro 70bd3c0
fix(platform): pass SOPS_AGE_KEY via Convex env vars instead of Docke…
larryro bfbfa15
feat(platform): add per-agent provider binding and model selector UI
larryro fc6a7ce
fix(platform): move model selector to right side next to agent selector
larryro 2b25d5e
refactor(platform): centralize provider model resolution and harden p…
larryro f5fbaea
fix(platform): pass resolved provider name to message metadata
larryro 175a4a1
fix: resolve lint, format, and knip CI failures
larryro 7c4928d
fix(cli): remove unused deriveAgePublicKey function
larryro File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| { | ||
| "displayName": "OpenRouter", | ||
| "description": "Multi-model AI gateway with access to leading LLM providers", | ||
| "baseUrl": "https://openrouter.ai/api/v1", | ||
| "supportsStructuredOutputs": true, | ||
| "models": [ | ||
| { | ||
| "id": "moonshotai/kimi-k2.5", | ||
| "displayName": "Kimi K2.5", | ||
| "description": "High-performance general-purpose model", | ||
| "tags": ["chat"], | ||
| "default": true | ||
| }, | ||
| { | ||
| "id": "deepseek/deepseek-v3.2", | ||
| "displayName": "DeepSeek V3.2", | ||
| "description": "Strong reasoning and general capabilities", | ||
| "tags": ["chat"] | ||
| }, | ||
| { | ||
| "id": "qwen/qwen3-next-80b-a3b-instruct", | ||
| "displayName": "Qwen3 Next 80B", | ||
| "description": "Fast and efficient instruction-following model", | ||
| "tags": ["chat"] | ||
| }, | ||
| { | ||
| "id": "qwen/qwen3.5-35b-a3b", | ||
| "displayName": "Qwen3.5 35B", | ||
| "description": "Compact and fast model", | ||
| "tags": ["chat"] | ||
| }, | ||
| { | ||
| "id": "anthropic/claude-opus-4.6", | ||
| "displayName": "Claude Opus 4.6", | ||
| "description": "Most capable model for complex reasoning and coding", | ||
| "tags": ["chat", "vision"] | ||
| }, | ||
| { | ||
| "id": "openai/gpt-5.2", | ||
| "displayName": "GPT-5.2", | ||
| "description": "OpenAI's latest flagship model", | ||
| "tags": ["chat", "vision"] | ||
| }, | ||
| { | ||
| "id": "qwen/qwen3-vl-32b-instruct", | ||
| "displayName": "Qwen3 VL 32B", | ||
| "description": "Vision-language model for image understanding", | ||
| "tags": ["chat", "vision"] | ||
| }, | ||
| { | ||
| "id": "qwen/qwen3-embedding-4b", | ||
| "displayName": "Qwen3 Embedding 4B", | ||
| "description": "Text embedding model for semantic search", | ||
| "tags": ["embedding"], | ||
| "dimensions": 1536 | ||
| } | ||
| ], | ||
| "i18n": { | ||
| "de": { | ||
| "description": "Multi-Modell-KI-Gateway mit Zugang zu fuhrenden LLM-Anbietern", | ||
| "models": { | ||
| "anthropic/claude-opus-4.6": { | ||
| "description": "Leistungsstarkstes Modell fur komplexe Aufgaben und Programmierung" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| { | ||
| "apiKey": "ENC[AES256_GCM,data:5t/po/UofoTQMn/Cgz6ju3Ij6YbuAdOqBmAK/b0SoVGfu7BNKXaJPBJZNC8GGw8OQeMzhDl+DamCM5hl3hd4HFJOdwDwdplFZQ==,iv:9jD1tqi60JYJkb+cY0nY6QNHdnZPQ4F6sQeing5QJ9E=,tag:hdps/EHR4LHUhwzH76mXag==,type:str]", | ||
| "sops": { | ||
| "kms": null, | ||
| "gcp_kms": null, | ||
| "azure_kv": null, | ||
| "hc_vault": null, | ||
| "age": [ | ||
| { | ||
| "recipient": "age1xsc5y9x0dref9kd6fwv2356pw2zl5s7gp5v6jam9h4q7mv6fm9aqumvqhj", | ||
| "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4aCtrT1U2SHJiRE9LZjNi\nWUVuZ1JCbGJOUmRiUDBpR3NDTklBUjJxeDNRClEwbDBnY0ErQmM1SzEyM2tsMEJJ\nRVZYQjJ5bGhBMnBvM1RRQmFIV25XWWcKLS0tIEszVUZuaEN1Y3pQWlZodjQzMFJE\nVHlaR3hHRXJwTGh0Vk1KU1JuWkprWnMK/7HmxFH5ciZqhgtfzGyzYhnU08hESOnM\nC1F7mP6UrJ6kyWKFNEdluayhFkTnixTGJ6GrL72tClvrQRAyGuKAEA==\n-----END AGE ENCRYPTED FILE-----\n" | ||
| } | ||
| ], | ||
| "lastmodified": "2026-04-03T02:55:08Z", | ||
| "mac": "ENC[AES256_GCM,data:CAoKo2SqAUL7iVjWylNxhecEhJfBNQAUFqCEMLmBqBRERxCj7nsclIBmyA9KpJR14qrWM8vF7u3aNC95Wwzww1xh17pC31VYPcIdF8bxmbQ/Djkx0/BBPHaXXZcjBnObKsDhfltNZx8G+IBrRshY07CWYqYRzm9ogrkzfFHgIL8=,iv:AnitQlvUD+/Yahxx6HTa/qnlklHYOt4Bwv5WtUgaFsA=,tag:bSA7cW4N1s9FKHh/Sf0QyA==,type:str]", | ||
| "pgp": null, | ||
| "unencrypted_suffix": "_unencrypted", | ||
| "version": "3.9.4" | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,19 @@ | ||
| """Configuration utilities.""" | ||
|
|
||
| from .base import BaseServiceSettings | ||
| from .providers import ( | ||
| ProviderConfig, | ||
| get_chat_model, | ||
| get_embedding_model, | ||
| get_vision_model, | ||
| load_providers, | ||
| ) | ||
|
|
||
| __all__ = ["BaseServiceSettings"] | ||
| __all__ = [ | ||
| "BaseServiceSettings", | ||
| "ProviderConfig", | ||
| "get_chat_model", | ||
| "get_embedding_model", | ||
| "get_vision_model", | ||
| "load_providers", | ||
| ] |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
German localization strings contain spelling errors.
Please fix
"fuhrenden"→"führenden"and"fur"→"für".✍️ Suggested patch
📝 Committable suggestion
🤖 Prompt for AI Agents