You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
Model catalog discovery: a provider's published models are read and recorded, so a tier can be resolved from what the vendor actually serves. Includes a background refresh, a RefreshAvailableModels command, and an AvailableAIModelDiscovery query.
ChatGPT subscription credentials - sign-in, storage, expiry-aware refresh, and the classification of whether a provider was given an API key or a subscription record.
Claude Code and OpenAI Codex as provider transports. The Anthropic client now routes to Claude Code when the credential is an OAuth token, which the Messages API will not accept.
Provider pools with failure- and capacity-aware member selection, plus PoolMemberSelector.Candidates for callers that fail over rather than picking once.
Rate-limit cooldowns, per-provider usage ceilings, configurable concurrency, and usage snapshots.
IDefaultAgentInvocationModes, which says whether a purpose runs as a job or a chat when no configured agent claims it.
Generated TypeScript proxies for all of the above, published in @cratis/ai.
Changed
ConfiguredAIProvider carries the provider's endpoint, tier mapping, usage credential, usage ceiling, rate-limit cooldown and discovered catalog. Its properties are non-nullable with sentinel defaults: a nullable property on a [Passive] read model reads back null from a running kernel however the events were recorded, while in-process scenarios populate it happily - so a value could be configured, recorded, and invisible to the code that resolves a provider, with nothing failing.
AnthropicProviderClient takes the Claude Code transport alongside its quota tracker.
ReconfigureOpenAIProvider and AddOpenAIProvider record which kind of credential arrived, and refuse a subscription record that is too incomplete to be spent.
ProviderConcurrencyGate is a singleton. It holds per-provider semaphores in instance state and was registered nowhere, so every resolution got a fresh set and the gate limited nothing.
Claude Code usage reports cached tokens separately instead of folding them into the input count - a cache read is billed differently from a fresh input token.
The three event types that carried an explicit GUID identifier now key on their type name like every other event type. No stored event anywhere used those GUIDs.
Removed
Cratis.AI.Providers.Resolving, whose ConfiguredAIProvider collided by name with the one in Cratis.AI.Providers.
The duplicate AIProviderPoolMember in Cratis.AI.Providers.Pools; the one in Pools.Listing is the single definition.
Cratis.AI.Agents.Identity is now Cratis.AI.Agents.Naming - a namespace called Identity shadowed Chronicle's own Identity type for every consumer.