Name vendors after their APIs and split placeholder delivery - #179
Merged
Conversation
|
The latest Buf updates on your PR. Results from workflow buf-pr / buf (pull_request).
|
vendor is renamed anthropic|openai. Naming the enum after CLIs is what produced the incoherent OpenAI binding: the row paired chatgpt.com -- the subscription host Codex calls -- with OPENAI_API_KEY, the variable that puts Codex in API-key mode addressing api.openai.com instead. A credential belongs to the API it authenticates; which CLI presents it is incidental. The old names stay as aliases on the same numbers, so nothing on the wire changes and no consumer has to recompile in lockstep. That leaves the database rows, the OpenZiti services, and the role attributes on live identities as the only things needing migration -- and lets them migrate one at a time rather than together. A placeholder is now typed. Codex reads its subscription credential from a file rather than an environment variable, and the two kinds have different writers: a variable must be on the container spec for a sandbox shell to inherit it, while a file lands at a CLI-specific path under HOME that only agynd can resolve. The attachment carries the kind and everything its writer needs.
vitramir
force-pushed
the
vendor-naming-and-openai
branch
from
August 8, 2026 21:21
48bb30b to
5da419a
Compare
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Contracts for OpenAI Subscriptions and Vendor Naming.
Additive only —
buf breakingagainstmainis clean, and so isbuf lint.Vendors are named after APIs
claude/codexbecomeanthropic/openai. Per the spec this is the cause of the OpenAI gap rather than cosmetics: the old row pairedchatgpt.com— the subscription host a Codex CLI calls at/backend-api/codex/responses— withOPENAI_API_KEY, the variable that puts a Codex CLI in API-key mode addressingapi.openai.com. Two mutually exclusive configurations in one row, because the row was named after the client rather than the API it opens.The old names are retained as aliases on the same numbers. Nothing on the wire changes, and no consumer has to recompile in lockstep:
Generated code carries both constants at the same value. JSON accepts either name and emits the first declared, so
VENDOR_ANTHROPICbecomes canonical on output while"VENDOR_CLAUDE"still parses on input.allow_aliasis banned by the STANDARD lint set, hence the targeted ignore — verified that the rename failsbuf breakingwithout the alias and passes with it.The alias does not remove the migrations, it sequences them. Three things still hold the old names and are the risk the spec names: subscription rows (
vendor TEXTplus its CHECK constraint), the provisioned OpenZiti services and Dial policies, and thellm-native-<vendor>role attributes stamped on live workload identities. A workload holdingllm-native-claudeafter its service is renamed dials something that no longer exists and silently stops reaching its vendor.Placeholders are typed
A placeholder is the dummy credential an agent CLI needs to start, which the proxy discards and replaces. Codex reads its subscription credential from
~/.codex/auth.jsonrather than an environment variable, so the mechanism gains a second kind — and the kinds have different writers:ENVExeccarries no environment, so the session inherits the container spec'sFILEagynd, at container startSubscriptionAttachmenttherefore carriesplaceholder_kindplus the variable name (ENV) or the path and contents (FILE), so neither writer holds a vendor table of its own.placeholder_envkeeps its field number and its meaning for the ENV kind.Sequencing
This lands first — every service regenerates from the published module. Implementation follows in
llm,agents-orchestrator,agynd-cli,llm-proxy,bundle-vm,agyn-cli,console-app, ande2e, along with the three migrations above.