# Changelog

## Unreleased

## 0.2.0 - 2026-07-27

- Publish preflight now verifies the exact local sibling release on Hex, so an
  older package version cannot falsely satisfy release readiness. Nested
  package tasks now resolve the workspace manifest instead of looking for one
  inside `apps/inference`, and manifest self-entries are excluded.
- Removed the outbound ASM strict-common preflight; ASM owns its own run-path
  option gate and the adapter no longer requires an `:asm_options_module`.
- Made `Inference.Request.response_format` a closed, validated union
  (`:text`, `{:json, :object}`, `{:json_schema, %{name:, schema:, strict:}}`).
  Every adapter now maps it or refuses with `:response_format_unsupported`.
- Mapped structured output through to providers: ASM `:output_schema`, Gemini
  `responseJsonSchema`/`responseMimeType`, ReqLLM `generate_object/4`.
- Switched the direct Gemini adapter to `Gemini.generate/2` and propagated the
  provider-reported object, usage, finish reason, response id, and model
  version; the managed Gemini adapter now accepts response formats and reports
  object output.
- Mapped `ASM.Error` kinds and `Gemini.Error` http statuses onto the declared
  error categories and preserved the provider error under
  `metadata.provider_error`.
- Added adapter-reported `Inference.Capability` claims and
  `Inference.capabilities/1`, including ASM's provider-declared
  `:structured_output` feature.
- Added `Inference.Client.agent_session/1` and `agent_session!/1` as the
  explicit agent-session opt-in; the default admitted-kind set is unchanged.
- Made completion-only explicit: ASM calls lock `completion_only: true`, Gemini
  requests refuse tool options, and a provider-returned tool call is a typed
  `:unexpected_tool_call` failure.
- Added `AdapterCase.assert_response_format_contract/2` and
  `assert_capability_contract/2` conformance helpers.

## 0.1.0 - 2026-07-13

- Initial project skeleton.
- Standardized Hex, HexDocs, changelog, and license release metadata.
- Added closed adapter provider kinds and explicit client admission so model
  endpoints remain the default while ASM agent sessions require opt-in.
- Documented `gemini_ex` as the distinct Gemini API SDK, Gemini CLI as retired,
  and Antigravity as the current Google coding-agent SDK behind ASM.
- Added semantic inference contracts.
- Added mock and optional provider adapter modules.
- Added live-gated provider examples.
- Expanded ReqLLM compatibility with structured object generation, provider key
  aliases, and portable tool conversion.
- Expanded ASM compatibility with managed streaming sessions and string-session
  routing.
- Added first-class response and trace cost fields, with shared extraction from
  provider map/struct results.
- Preserved ReqLLM tool-choice options and tool-call response fields through the
  compatibility adapter.
- Added ASM stream lifecycle coverage for early consumer halt and additional
  event-shape normalization.
- Fixed ASM prompt override handling so compatibility wrappers can preserve raw
  prompt text without forwarding internal `:prompt` options to Agent Session
  Manager.
