…ompliance (#53)
* refactor(error)!: return KernelError from embedding and discovery APIs
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`.
* feat(llm): forward tools and response_format to providers
`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.
* feat(mcp): align server with the 2025-06-18 MCP spec
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.
* chore(release): v0.13.0
- 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