- Added `rewrite-changelog.ts` and `fix-changelogs.ts` utilities to automate the consolidation of release notes using LLM-assisted processing.
- Updated multiple internal changelog files by consolidating redundant entries and improving phrasing for readability.
- Implemented `previewLine` utility in `coding-agent` to prevent visual spillover in status rows by managing text truncation and whitespace.
- Updated `package.json` with new workflow scripts for managing package-level change histories and documentation indexes.
- Replaced unknown model contextWindow/maxTokens sentinels with nullable values across types and catalog data.
- Mapped request token calculations to treat null maxTokens as unlimited output caps.
- Updated remote compaction and context checks to ignore unknown limits by using Infinity/0 fallbacks.
- Adjusted CLI/model registry flows to skip cap enforcement for null limits and render unknown values as '-'.
The xai-oauth (Grok Build / SuperGrok) curated catalog left maxTokens at
the UNK_MAX_TOKENS (8888) placeholder for half its models and a stale
overlay-baked 30000 on the three grok-4.x entries — an inconsistent,
needlessly short output budget.
xAI's OAuth /v1/models exposes no per-request output limit, so the
curated catalog now owns maxTokens the same way it owns contextWindow:
mergeCuratedIntoModel sets maxTokens = curated.contextWindow on both the
static-seed and online-overlay paths, so an online refresh can no longer
regress it. The openai-responses wire still clamps the actual request to
min(requested, model.maxTokens, OPENAI_MAX_OUTPUT_TOKENS=64000), so this
removes the artificial sub-cap without ever requesting an unbounded
output budget — a catalog maxTokens that tracks the context window is the
documented convention (see the 15.10.8 output-cap note).
models.json was regenerated for the xai-oauth section only, via the
generator's own buildXaiOAuthStaticSeed() + applyGeneratedModelPolicies()
+ localeCompare sort; the section is byte-identical to what a full
`generate-models` run would emit for that provider, with unrelated
other-provider network churn excluded to keep the diff scoped. The
contract test pins maxTokens === contextWindow on both the seed and the
bundle so the 8888 placeholder can never silently leak back.
Exposes Cursor's "Composer 2.5 Fast" through the xAI Grok OAuth
(SuperGrok) subscription so it is selectable in the chat picker and
resolves synchronously at boot: non-reasoning, text-only, 200K context,
zero cost.
The single source edit is the XAI_OAUTH_CURATED_MODELS entry in
openai-compat.ts; buildXaiOAuthStaticSeed renders it into models.json so
the synchronous boot-time default-model resolver sees it without waiting
for an online refresh.
Provenance of the models.json hunk: it is byte-identical to the
generator's deterministic xai-oauth output. generate-models.ts pushes
buildXaiOAuthStaticSeed() (offline — xai-oauth has no upstream catalog
source) followed by applyGeneratedModelPolicies(), so a regen reproduces
these exact bytes; the only reason the file was not committed straight
from `generate-models` is that a full run also pulls unrelated
other-provider network churn and would regress grok-4.3 /
grok-4.20-0309-* maxTokens (overlay-baked 30000 -> 8888 placeholder).
That churn was excluded to keep the diff scoped.
The wire id grok-composer-2.5-fast (200K context, no configurable
reasoning effort) matches xAI's Grok Build OAuth surface. A focused
contract test pins the literal attributes (reasoning:false, 200K,
text-only) and the bundled entry's zero-cost invariant, which the
seed<->bundle parity loop cannot catch.
- Centralized catalog and registry handling on `ModelSpec` and `buildModel`, resolving compatibility at model build time.
- Removed runtime compatibility detectors and switched provider request flows to direct `model.compat` reads.
- Added compat fields (`supportsReasoningParams`, `alwaysSendMaxTokens`, `strictResponsesPairing`, `whenThinking`).
- Persisted explicit compatibility overrides through `compatConfig` in discovery and cache merge paths.
Move bundled models, model cache/manager, thinking metadata, effort helpers,
provider descriptors/discovery, wire constants, and model identity utilities
into the new @oh-my-pi/pi-catalog package.
Update pi-ai to keep provider runtime/auth concerns, move catalog provider
metadata into CATALOG_PROVIDERS, and migrate coding-agent, agent, stats, docs,
and tests to import catalog values from pi-catalog.
Split coding-agent model registry helpers into discovery, roles, and models
config modules while preserving registry orchestration.
BREAKING CHANGE: @oh-my-pi/pi-ai no longer exports catalog subpaths such as
/models, /model-cache, /model-manager, /model-thinking, /effort,
/provider-models*, discovery helpers, and provider wire constants; use the
matching @oh-my-pi/pi-catalog subpaths instead.