0.4.0
What's Changed
Added
- MCP proxy + two-tool gateway runtime (#13, #28, #29, #34) — full proxy/gateway surface: ool_browse, ool_execute, ool_view meta-tools; ProxyRuntime shared core; StubUpstream, McpClientUpstream, MultiplexUpstream adapters; stdio server bindings; structured GatewayError returns.
- Weaver-spec interop (#143, #145, #151) — RoutingDecision dataclass, RouteResult.to_routing_decision(), contextweaver.adapters.weaver_contracts with lossless round-trips; make weaver-conformance gating CI step.
- Canonical ool_id grammar (
outing/tool_id.py) and ** ool_browse path grammar** (
outing/path.py) per docs/gateway_spec.md. - Content-addressed firewall idempotency (#190) — ArtifactRef.content_hash; �pply_firewall short-circuits on duplicate content.
- Framework integration guides for LlamaIndex, LangChain/LangGraph, OpenAI ADK, Google ADK, Pipecat (#77–80).
- Gateway surface specification — docs/gateway_spec.md (#30, #31).
- Integration cookbook — docs/cookbook.md + examples/cookbook/ (#105).
- Benchmark scorecard — make scorecard / make scorecard-check; docs/benchmarks.md (#197).
- Stress-test benchmark scenario (#181).
- Slack ops bot reference architecture — examples/architectures/slack_ops_bot/ (#198).
- Decision-tree landing page — docs/which_pattern.md (#199).
- Discoverability polish — README badges, CITATION.cff, PyPI classifiers/keywords/URLs (#200).
Changed (breaking)
- mcp and jsonschema promoted to core dependencies (no longer optional).
- mcp_tool_to_selectable emits canonical ool_id — legacy \mcp:{name}\ form retired.
- make_choice_cards is token-native — \max_total_chars\ / \max_desc_chars\ arguments removed; use \ arget_tokens_per_card\ / \hard_cap_tokens_per_card.
Full changelog: https://github.com/dgenio/contextweaver/blob/main/CHANGELOG.md