mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-16 12:03:23 +00:00
Support shell command execution for API key resolution in models.json (#762)
* Support shell command execution for API key resolution in models.json Add ! prefix support to apiKey field in models.json to execute shell commands and use stdout as the API key. This allows users to store API keys in secure credential managers like macOS Keychain, 1Password, Bitwarden, or HashiCorp Vault. Example: "apiKey": "!security find-generic-password -ws 'anthropic'" The apiKey field now supports three formats: - !command - executes shell command, uses trimmed stdout - ENV_VAR_NAME - uses environment variable value - literal - uses value directly fixes #697 * feat(coding-agent): cache API key command results for process lifetime Shell commands (! prefix) are now executed once and cached. Environment variables and literal values are not cached, so changes are picked up. Addresses review feedback on #762. --------- Co-authored-by: Mario Zechner <badlogicgames@gmail.com>
This commit is contained in:
parent
a67f6f9916
commit
def9e4e9a9
5 changed files with 315 additions and 14 deletions
|
|
@ -674,7 +674,10 @@ Add custom models (Ollama, vLLM, LM Studio, etc.) via `~/.pi/agent/models.json`:
|
|||
|
||||
**Supported APIs:** `openai-completions`, `openai-responses`, `openai-codex-responses`, `anthropic-messages`, `google-generative-ai`
|
||||
|
||||
**API key resolution:** The `apiKey` field is checked as environment variable name first, then used as literal value.
|
||||
**API key resolution:** The `apiKey` field supports three formats:
|
||||
- `"!command"` - Executes the command and uses stdout (e.g., `"!security find-generic-password -ws 'anthropic'"` for macOS Keychain, `"!op read 'op://vault/item/credential'"` for 1Password)
|
||||
- Environment variable name (e.g., `"MY_API_KEY"`) - Uses the value of the environment variable
|
||||
- Literal value - Used directly as the API key
|
||||
|
||||
**API override:** Set `api` at provider level (default for all models) or model level (override per model).
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue