Repository navigation
refactor: consumer-owned interfaces for dialogs, tools, and app services - #4565
Merged
Merged
Conversation
Assisted-By: docker-agent
Assisted-By: docker-agent
LookupCommand, ResolveCommand, and executeToolCommands now take the minimal interface they need instead of the full Runtime, so tests mock less surface. Assisted-By: cagent
trungutt
approved these changes
Oct 9, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Oct 9, 2026
aheritier
approved these changes
Oct 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Several packages depended directly on concrete types from unrelated packages
just to call a handful of methods, which made those consumers harder to test
in isolation and tied their compile-time dependencies to implementation
details they didn't need. This change moves toward consumer-defined
interfaces: each package now declares the narrow contract it actually needs,
and the concrete types satisfy it implicitly.
Six areas are affected. The attention dialogs in
pkg/tui/dialogno longerdepend on the app type directly. Five tool expanders
(
pkg/tools/a2a,pkg/tools/builtin/openurl,pkg/tools/builtin/fetch,pkg/tools/builtin/openapi,pkg/tools/builtin/webhook) each define theirown expansion contract instead of importing a shared concrete type. App
title generation in
pkg/appnow goes through a small interface rather thana direct dependency. The RAG backend in
pkg/tools/builtin/ragand the A2Astreaming sender are likewise behind interfaces owned by the tool package
that uses them. Finally,
pkg/runtimenarrows the contract it needs forcommand resolution.
In every case the refactor is structural only: nil handling, evaluation
timing, and lifecycle ordering are unchanged, and shared domain types and
construction-time dependencies are still passed through as before. Each
change is paired with focused unit tests covering the new interface
boundary, and the full build, test, and lint suite is green for every
commit on the branch.