Skip to content

Release v6.0.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 20:44
b184007

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.