ryu-tool-registry 0.1.3

Unified tool-catalog primitive for Ryu (#474): the Contract-1 descriptor types (`ToolKind`/`ToolDescriptor`/`DescribedTool`/`DescribedArg`), the swappable `ToolRanker` (BM25 default + an embedder-backed Semantic seam), argument-schema parsing, and the pure search/describe bodies over `ToolDescriptor`. An extracted Core capability crate: in-process by default, consumed as a NON-optional path dependency (the `/api/tools/{search,describe}` endpoints and the mcp_bridge tool-search meta-tool reach it in every build, including lean). The semantic embedder injects via the narrow `ToolEmbedder` trait, so the crate has ZERO dependency on apps/core — the `RegistryTool`→`ToolDescriptor` ingest adapter, the built-in server inventory classification, the Composio live fetch, and the registry-driven embedder choice stay Core-side (`apps/core/src/sidecar/mcp/catalog.rs` + `apps/core/src/tool_registry_host.rs`).
Documentation
# ryu-tool-registry

Unified tool-catalog primitive for Ryu (#474): the descriptor types and the pure
search / describe bodies behind a swappable ranker seam.

## Role in the decomposition

An extracted Core capability crate — **in-process by default** and consumed as a
**non-optional path dependency**: the `/api/tools/{search,describe}` endpoints and
the `mcp_bridge` tool-search meta-tool reach it in every build (including lean). It
carries **zero dependency on `apps/core`**. The semantic embedder injects via the
narrow `ToolEmbedder` trait. The `RegistryTool → ToolDescriptor` ingest adapter,
built-in server inventory classification, Composio live fetch, and the
registry-driven embedder choice stay Core-side.

## Key API (`src/lib.rs`)

- `ToolDescriptor` / `ToolKind` / `DescribedTool` / `DescribedArg` — the Contract-1
  descriptor types over which search and describe operate.
- `ToolRanker` — swappable ranker; **BM25 default** plus an embedder-backed
  `Semantic` seam.
- `ToolEmbedder` — trait the semantic ranker calls; supplied by Core.
- `run_search` — the pure search body over `[ToolDescriptor]`.
- `describe_from_parts` / `describe_composio` / `described_args` / `arg_summary`  argument-schema parsing and describe bodies.

## Swap seam

`ToolRanker` selects the ranking strategy: BM25 lexical default, or a Semantic
ranker backed by any host-provided `ToolEmbedder` — chosen by Core via the model
registry, never hardcoded.

## Consumed as

Compiled-into-Core crate (default path dependency); no optional features (leaf-pure
`serde` / `serde_json` / `async-trait`).