Repository navigation
v0.3.0
Any gateway, under any name, with the key kept wherever you keep secrets.
Added
apiKeyis a key reference, resolved by omp exactly like every other config value (resolveConfigValue): an environment variable name (LITELLM_API_KEY), a!commandwhose stdout is the key (!gpg -q -d ~/.omp/keys/gateway.gpg), or a literal key. The file can name where the secret comes from instead of holding it, so it is safe to track in a dotfiles repository.- The login entry accepts a reference as well as a key, resolves it before the model-list probe, and reports how the key was stored.
bun run typecheckandbun test(URL, name, model-id and config-parsing helpers), both run by CI on push and pull request.- SECURITY.md: what each reference form protects, and how to report a vulnerability privately.
Changed
- Renamed the repository, package and plugin to
omp-gateway(wasomp-gateway-login). Uninstall the old id once:omp plugin uninstall omp-gateway-login, then installgithub:magic3007/omp-gateway. - A pasted literal key that an environment variable already holds is stored as that variable's name, and the login output says which one. A literal nothing holds is stored as typed and the login output says so — a secret never reaches the file silently.
- Docs and prompt examples use vendor-neutral gateway names; the config file (
~/.omp/agent/gateways-login.json) and its format are unchanged. - Base URLs with a query string or fragment are rejected at login: the derived endpoints would have dropped them silently.
Fixed
- One malformed row no longer costs every gateway. The file was validated as a whole, so a single bad row made the loader report no gateways at all — and the next login then wrote that empty list back over the file. Rows are now parsed one by one, bad ones are logged and skipped, and the login entry refuses to write while any row is unusable.
openai-completionsgateways now get the/v1that wire requires, andanthropic-messagesgateways no longer get a doubled/v1when the stored URL ends in/v1: base URLs are canonicalized to the gateway root and the suffix is added per use.- A login name already taken by another provider (a built-in, or a
models.ymlblock) is rejected instead of shadowing it. - A second row repeating a gateway name is skipped instead of registering the provider twice.
- The config file is
chmod'ed to0600on every write, not only when created. - Model discovery failures are logged with the gateway name and endpoint before being rethrown; omp otherwise swallows them and the models just go missing.
- Typing the name of a variable nothing exports now fails with that diagnosis, instead of the gateway's bare 401 for a key it never had.
- Non-chat ids with no prefix (
tts-1,whisper-1) are filtered out of catalogs.