release: v0.13.0 — error unification, LLM tool forwarding, MCP spec compliance#53
Merged
Conversation
Unify the public error surface: `embedding` and `discovery` now return `crate::error::Result` (`KernelError`) instead of `anyhow::Result`, so `anyhow` no longer leaks through the library's public API. Adds `KernelError::Embedding` and `KernelError::Discovery` (plus `::embedding` / `::discovery` constructors). Touches the `EmbeddingProvider` / `VectorIndex` / `AsyncVectorIndex` traits, all provider and index constructors, the `LazyFastembedProvider` loader path (`LoadFn` / `load_catching_panics` now yield `KernelError`), `DiscoverySource`, `chunk_batch`, `discovery::fetch*`, and `provider::sync::*`. Also guards `LazyFastembedProvider::embed_batch` against an index-out-of-bounds panic when the inner provider returns fewer vectors than inputs. BREAKING CHANGE: embedding and discovery APIs return `KernelError` instead of `anyhow::Error`.
`LLMRequest::tools` and `response_format` are now sent to the provider APIs instead of being silently dropped: OpenAI receives `tools` (`type: "function"`) and `response_format`; Anthropic receives `tools` (with `input_schema`) and, for `ResponseFormat::JsonSchema`, `output_config.format`. Tool calls are parsed back into the new `LLMResponse::tool_calls`; `finish_reason`, `id`, and `created` are captured too. Also offloads the synchronous `KvStore` read/write in `CacheClient::complete` to `tokio::task::spawn_blocking`, so a slow or remote store no longer blocks the async reactor on the hot path.
Protocol-version negotiation in `initialize`; `ping`; prompts (`prompts/list`, `prompts/get`, `register_prompt` / `set_prompt_handler`, `PromptDescription` / `PromptArgument`); `resources/templates/list`; correct wire-format field names (`inputSchema` / `mimeType`); verbatim string/number JSON-RPC ids; and in-band `tools/call` `isError` reporting (reserving `-32602` for an unknown tool). Applies to both the stdio and HTTP/SSE transports.
- docs: bump version pins to 0.13.0 (README, QUICKSTART, 10 i18n READMEs); fix the MCP quick-start example (`Tool`/`JsonRpcRequest` → `ToolDescription`) across all 11 files; propagate the v0.10.0 graph-algorithm content into every feature table; refresh ROADMAP/PROGRESS (incl. the real v0.11.0/v0.12.0 releases); fix the SECURITY supported-versions table and the CODE_OF_CONDUCT enforcement contact - ci: isolated per-feature build/test matrix entries so a missing `#[cfg]` gate is caught even when a sibling feature is not co-enabled - Cargo.toml: document the eval/eval-full and dynamic-linking exclusions from `full` - bump version to 0.13.0, refresh CHANGELOG and lockfile
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ships v0.13.0 on top of v0.12.0. (Rebased onto current
main; supersedes the mistakenly-based #52.)Highlights
embedding+discoverypublic APIs returnKernelErrorinstead ofanyhow::Result— no moreanyhowin the library's public surface. Also folds theLazyFastembedProviderloader path (LoadFn) ontoKernelError, integrating with v0.12.0's panic-safe loader.LLMRequest::toolsandresponse_formatare now forwarded to OpenAI/Anthropic (were silently dropped); tool calls are parsed back intoLLMResponse::tool_calls.ping, prompts, string/number JSON-RPC ids,tools/callin-bandisError, and correct wire format (inputSchema/mimeType).LazyFastembedProvider::embed_batchpanic on truncated provider responses;CacheClientoffloads blocking store I/O viaspawn_blocking.ToolDescription) across README + 10 i18n, graph-algorithm content propagated, ROADMAP/PROGRESS/SECURITY/CoC refreshed (incl. the real v0.11.0/v0.12.0 releases).Verification (local, on the rebased tree)
cargo test --all-features— 599 passed, 0 failed, 13 ignoredcargo clippy --all-features -- -D warnings— cleancargo fmt --all -- --check— cleanRUSTDOCFLAGS=-D warnings cargo doc --all-features --no-deps— cleanBreaking change
Downstream code matching on
anyhow::Errorfrom embedding/discovery must switch toKernelError. See CHANGELOG[0.13.0]for the full list.🤖 Generated with Claude Code