Conversation
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
bub | 9865408 | Commit Preview URL Branch Preview URL |
Oct 04 2026, 01:20 AM |
|
I suggest keeping the original ToolProvider = Callable[[list[Tool], Tape], Awaitable[tuple[list[Tool], str]]]
Knowing tool names before For preparation order, run caller-supplied providers in their supplied order, then the builtin preparation (including code mode) last. Keep duplicate-name precedence separate from preparation order. This preserves the simpler extension API and lets builtin preparation operate on the final toolset without introducing catalogs for every processing stage. |
Keep the existing
ToolProviderabstraction and call signatures. Register discovery inventories separately, resolve allowlists against known names, run caller providers in supplied order, and prepare builtin code mode last. Source registration determines duplicate-name precedence independently of provider order.Register selected original declarations for execution while using provider-transformed definitions for each request. Builtins stay immediate; commands and subagents can resolve unloaded tools.
Relative to main, production changes are limited to
builtin/agent.pyand the subagent resolver (26 additions, 6 deletions). ToolProvider, code-mode implementation, skills and system prompt remain unchanged. Independent prompt/cache experiments are excluded.Validation: 572 core tests, 701 contrib tests against this core, Ruff, mypy, lock validation and EN/ZH docs build passed. Behavioral ablations cover discovery, execution registration, final builtin preparation and transformed provider definitions.
Companion: bubbuild/bub-contrib#74.