Changelog¶
The canonical version lives at the project root —
CHANGELOG.md.
The content below is the same, embedded via pymdownx.snippets so the
docs site never drifts.
Changelog¶
All notable changes to Murmur are documented here. The format is based on Keep a Changelog, and the project will adopt Semantic Versioning at v0.1.
Unreleased¶
The runtime is feature-complete for the public-API surface; no version has
shipped yet (0.0.0 placeholder). Highlights since project inception:
Added — runtime core¶
Agent— single unified frozen value object wrapping PydanticAI internally. Public fields:name,model,instructions,output_type,input_type,tools,mcp_servers,builtin_tools,fallback_models,model_settings,trust_level,context_passer,pre_process,post_process.AgentRuntimewith broker-URL parsing (kafka://,nats://,amqp://,redis://,memory://).RuntimeOptions—timeout_seconds,max_spawn_depth,retry_max_attempts,retry_backoff_factor,token_budget,mcp_eager_start.runtime.run,runtime.gather,runtime.run_group,runtime.shutdown_syncvariants.- Backends:
ThreadBackend(default, asyncio) andJobBackend(FastStream-driven, four broker schemes plus in-memory). Both pass the sharedBackendContracttest suite. - Context passers:
NullContextPasser,FullContextPasser. - Tool surface:
ToolRegistry,StaticToolProvider,ToolExecutorwith trust-level gating,ToolFunc[T]generic. - Pipeline middleware:
RetryMiddleware,TimeoutMiddleware,DepthLimitMiddleware,CostTrackingMiddlewarewithTokenBudget. - Domain errors:
MurmurErrorhierarchy with 11 subclasses. - 12 Protocols in
murmur.core.protocols/defining every pluggable surface.
Added — groups & DAGs¶
AgentGroup,Edge,EdgeMapper,FanOuttyping helper,get_fan_out_fieldintrospection.- Multi-input aggregation, conditional edges (
Edge.condition), branch routing.
Added — distributed¶
Workerdistributed consumer with lifecycle hooks (on_task_start,on_task_complete,on_task_error).Worker --all-from <PATH>registry auto-discovery.- Underlying-broker-lib log silencing —
aiokafka/aio_pika/redis/nats/faststreamlifted toWARNING.Worker.start()prints a Murmur-branded banner to stderr.
Added — server / client¶
AgentServer(standalone HTTP) andAgentRouter(embedded) — FastAPI surface withPOST /run,POST /submit,GET /runs/{id}, SSE event stream./healthzand/readyzsplit.MurmurClient(HTTP) andLocalClient(in-process), both satisfying a shared_RunBackendProtocol.RunStoreProtocol + four concretes:InMemoryRunStore,SQLiteRunStore,RocksDBRunStore,RedisRunStore. All pass the sharedRunStoreContracttest suite.
Added — observability¶
RuntimeEventtyped envelope +EventType(12 variants).EventEmitterProtocol + four concretes:LogEventEmitter,SSEEventEmitter,MultiEventEmitter,BrokerEventBridge. All pass the sharedEventEmitterContracttest suite.RuntimeOptions(token_budget=…)enforces token-cost ceilings viaCostTrackingMiddlewarewith pre-check + post-charge semantics; emitsBUDGET_EXCEEDEDbefore raising.- Distributed event bridge —
AgentRuntime(publish_events=True)opts the publisher intomurmur.events.{runtime_id}so worker events roll up to a central dashboard. murmur servestandalone HTTP server withGET /events/streamSSE.
Added — MCP¶
- MCP consume side —
agent.mcp_servers=acceptsmcp_stdio/mcp_http/mcp_ssefactories. Calls flow throughToolExecutorfor the same trust - lifecycle gate native tools get.
- MCP tool prefixing —
prefix=lets two servers exposing same-named tools coexist. - MCP eager-start —
RuntimeOptions(mcp_eager_start=True)holds subprocesses warm across runs via per-provider supervisor tasks. Agent.builtin_tools— PydanticAI provider-side tools (WebSearchTool,CodeExecutionTool, etc.) re-exported undermurmur.toolsso users neverimport pydantic_ai. BypassesToolExecutorby design (provider- side execution).Agent.fallback_models— ordered fallback model strings; wraps asFallbackModelat dispatch.Agent.model_settings— per-provider knobs (temperature, max_tokens, …) without leaking PydanticAI types.
Added — interop¶
murmur.interop.from_pydantic_ai— wrap an existingpydantic_ai.Agentinto a MurmurAgent.murmur.interop.as_faststream_handler— expose a MurmurAgentas a FastStream subscriber.
Added — CLI¶
murmur run script.py,murmur validate specs/,murmur worker start,murmur serve.
Added — packaging¶
- Workspace layout:
murmur-runtime(this) +murmur-client(separate wheel). - Optional extras:
[kafka],[nats],[rabbitmq],[redis],[all],[server],[sqlite],[rocksdb],[redis-runstore],[container],[docs].
Added — docs¶
docs/site built withmkdocs-material— 17 content pages (index, getting-started, concepts, guides, changelog, contributing) and 15 API reference pages with full mkdocstrings coverage.- GitHub Pages workflow at
.github/workflows/docs.ymlusingactions/upload-pages-artifact@v3+actions/deploy-pages@v4.