feat(pctx-py): replace deprecated api_key with arbitrary headers#105
Merged
Conversation
The system that validated the pctx api_key is no longer maintained. Replace the `api_key` client parameter with `headers: dict[str, str]`, an arbitrary set of headers applied to every HTTP request and the WebSocket connection request. No backwards-compatible shim is retained. The reserved `x-code-mode-session` header is applied after caller headers on the WebSocket connect so it cannot be clobbered. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Summary
The
api_keyparameter on thePctxclient is deprecated — the system that validated the key is no longer maintained. This replaces it with aheaders: dict[str, str] | Noneparameter: an arbitrary set of headers applied to every HTTP request and the WebSocket connection request.No backwards-compatible shim is retained;
api_keyand thex-pctx-api-keyheader are removed entirely.Changes
_client.py—Pctx.__init__now takesheadersinstead ofapi_key; spreads them into thehttpx.AsyncClientand forwards them to theWebSocketClient._websocket_client.py—WebSocketClienttakesheadersand merges them into the connect request. The reservedx-code-mode-sessionheader is applied after caller headers so it can't be clobbered.manual_code_mode.py— updated the commented example toheaders={"authorization": "Bearer xxxx"}.Remaining
api_keyreferences in the repo (README, crewai/langchain scripts) are OpenRouter LLM keys and are unrelated.Type choice
dict[str, str] | None— covers every practical "arbitrary headers" use. It cannot express duplicate header keys, but clients essentially never need repeated header names; the type can be widened later without a breaking change.Verification
make lintandmake typecheckpass. Client imports and instantiates withheaders.🤖 Generated with Claude Code