Skip to content

0.6.0a2

Pre-release
Pre-release

Choose a tag to compare

@frostming frostming released this 16 Oct 01:31
c705b24

Warning

This is a pre-release with breaking changes from 0.6.0a1 and 0.5.x. Read the upgrade notes below.

Highlights

pip install bub now installs only the agent kernel

bub.core can now be installed and imported without the rest of Bub. The default dependencies are only republic, pydantic, loguru and typing-extensions. The CLI, channels (including Telegram), the plugin system and TUI prompts move to a new app extra:

pip install "bub[app]"      # full Bub: CLI, gateway, channels, plugins
pip install bub             # kernel only, for embedding bub.core.Agent

If you run the bub command without the extra, it exits with the list of missing packages and an install hint. The Docker image, install.sh / install.ps1 and bub install already request bub[app].

Republic built-in tools in bub.core.Agent

Agent now accepts republic.tools built-in tools (WebSearch, WebFetch, CodeExecution, ImageGeneration, NativeTool) next to ordinary Tool objects:

agent = Agent(model=model, tools=[my_tool, republic.tools.WebSearch()])

They are exposed as agent.builtin_tools and sent with every model call. The provider runs them server-side, so they skip ToolExecutor, ToolCallStarted and prepare_tools.

New RunFinished event

Every RunStarted is now followed by a RunFinished carrying status (ok, error or cancelled), steps, elapsed_ms and error. It is recorded on the tape as loop.finish.

Upgrade notes

  • Install the app extra wherever you use the CLI, gateway, channels or plugins: pip install "bub[app]" / uv add "bub[app]".
  • Module moves: bub.tape, bub.tools, bub.store and bub.sidecars are removed; import from bub.core.tape, bub.core.tools, bub.core.store and bub.core.sidecars. bub.tool is unchanged.
  • Event renames: BeforeLlmCall → LLMCallStarted, AfterLlmCall → LLMCallFinished, BeforeToolCall → ToolCallStarted, AfterToolCall → ToolCallFinished, ChatCompleted → ChatFinished. Payloads LlmCallRequest / LlmCallResult / LlmCallDecision become LLMCallRequest / LLMCallResult / LLMCallDecision. Plugins implementing before_llm_call that import LlmCallDecision must update; hook names are unchanged.
  • Tape store: the kernel's FileTapeStore uses a plain substring query. The fuzzy, rapidfuzz-backed search is now bub.builtin.store.FuzzyFileTapeStore, which the builtin plugin still provides, so CLI users see no change.
  • .env loading moved from bub.framework to bub.configure; bub.hookimpl no longer loads .env.
  • run_once is now an async generator that writes usage into the given StreamState. Update subclasses that override it.

Changes

   🚨 Breaking Changes

  • Install only bub.core by default and streamline the agent kernel  -  by @frostming and Claude Opus 5.5 in #361 (c705b)

   🚀 Features

    View changes on GitHub