opencode icon indicating copy to clipboard operation
opencode copied to clipboard

feat(plugin): align plugin tool types with built-in tool capabilities

Open eXamadeus opened this issue 1 week ago • 1 comments

What does this PR do?

Fixes: #8327

Related: #8269, #8380

[!NOTE] This is complementary to the v2 SDK upgrade in #8380. This PR improves type safety of the ToolContext used for developing custom tools in plugins. The other PR is focused on upgrading the client capabilities for plugins. Similar, but slightly different goals.

This PR aligns plugin tool types with the capabilities tools already have. Specifically:

  • Exposes ToolContext fields to plugin tools: callID, extra, ~metadata()~, and ~ask()~ to give plugins the correct context types
    • update: metadata() and ask() were added in #8269
  • Adds ExecuteResult type allowing plugin tools to return structured result objects with title, metadata, output, and attachments instead of only plain strings
  • Updates the registry to handle structured results from plugin tools, bypassing truncation when plugins return an ExecuteResult directly (assuming tools till truncate...we could add a check here?)
  • Exports all useful intermediate-types so plugin authors can use them more ergonomically.

This enables plugins to provide richer tool responses with proper metadata updates, closer matching the flexibility of built-in tools.

How did you verify your code works?

  • Ran the test suite
  • Ran TypeScript type checking
  • Verified locally with a plugin in development that required proper metadata updates from plugin tools

The types all align nicely in the registry:

Zight Recording 2026-01-13 at 09 43 34 PM

eXamadeus avatar Jan 14 '26 02:01 eXamadeus

The following comment was made by an LLM, it may be inaccurate:

Based on my search, I found one potentially related PR:

Related PR:

  • PR #6042: feat(plugin): add optional askPermission to ToolContext
    • https://github.com/anomalyco/opencode/pull/6042
    • This PR also deals with extending ToolContext for plugins, adding the askPermission field. Your current PR (#8328) expands on this by exposing additional ToolContext fields (callID, extra, metadata(), and ask()).

This is related but not a duplicate since it's focused on a specific field addition rather than the broader alignment of plugin tool types with built-in capabilities that PR #8328 addresses.

No other duplicate PRs found.

github-actions[bot] avatar Jan 14 '26 02:01 github-actions[bot]