pi-ai resolves an OAuth provider from a stored OAuth credential alone, and
this adapter builds its Models collection with no credential store and runs
no login flow. `openai-codex` — the one installed provider declaring
`auth.oauth` with no `auth.apiKey` — was therefore offered on the Models page
with the keyless placeholder every pi-ai route carries, and every request on
it failed `Provider is not configured` before going out.
`catalogProviderTakesApiKey()` answers whether pi-ai's installed provider for
a route declares the one method this adapter can supply, and the directory
skips the catalog routes that fail it. Catalog membership is unchanged, so
`declared` still answers what pi-ai ships; the profile half of the union stays
unconditional, so a route a settings document already names keeps its entry
and can be edited or deleted.
Resolution is untouched: a profile naming `apiKeyEnv` on such a route still
builds a working provider.
The snapshot embeds the root README pair as a reviewed example; regenerate
it so the example reflects the finalized English README and its Chinese
counterpart.
Split the quickstart into a Run section with a Run from npm subsection,
mirror it in the Chinese pair, and point the Web UI guide and providers
docs back at the #run anchor.
Reorder the Cordis attribution clause, shorten the install lead-in, and
flatten the community section into a single list; sync README.zh.md and
the pairing record.
Finalize the English root README (developer-preview notice, npm run path,
community sections) and re-translate README.zh.md to match, updating the
pairing record. Fix the README.md#run anchors in the Web UI guide and model
providers docs after the Run section was renamed.
The shipped bundles keep ctx.sessionQuery mounted but set the new
session-query-sqlite `openAt: never` phase: searchSessions/searchEvents
fail with the typed SESSION_QUERY_SEARCH_DISABLED code before any request
normalization, node:sqlite is never imported or opened, and no source
observation or reconciliation runs. Every inherited exact read, filter,
and trace — session export descendants, subagent-fork Workspace
inheritance, title reads — keeps working, and the Web sidebar search
degrades to its designed local title/workspace matching. Enabling content
search is a one-line openAt override in a later patch layer; the web e2e
scaffold keeps it enabled as the assembled opt-in coverage.