1ba81a7cd0
Plugin `tools[]` overlapped with MCP, kandev's established mechanism for exposing tools to agents (`internal/mcp/`), and the `InvokeTool` path was never wired into agent tool sets — the `listTools` handler was listing-only. Rather than maintain a half-built parallel surface, remove it. If plugins ever contribute agent tools, they should feed through MCP, not a separate `InvokeTool` RPC. Removes: - proto `InvokeTool` RPC + `ToolRequest`/`ToolResponse`/`ToolContext` messages (regenerated `*.pb.go` / `*_grpc.pb.go`) - pkg/pluginsdk `InvokeTool` from the `Plugin` interface and `UnimplementedPlugin`, the Tool* Go-native types, and the `RemotePlugin`/`GRPCServer` dispatch - internal/plugins `Service.InvokeTool`, the `listTools` handler + `GET /api/plugins/tools` route, `PluginToolDTO`, and the manifest `Tools` field + tool-name uniqueness validation - frontend `PluginTool`/`PluginToolDTO` types, `listPluginTools`, and the manifest-card tools list - fixture/e2e `InvokeTool` echo impl and the `tools:` manifest block Test doubles that used the "crash" tool to exercise crash-restart now use a "crash" webhook key instead. Internal specs (GRPC-CONTRACT, spec) drop the tool RPC/feature; docs/public was already updated in #1774. Co-authored-by: Kandev Agent <agent@kandev.dev> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
29 lines
846 B
Go
29 lines
846 B
Go
package plugins
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/kandev/kandev/pkg/pluginsdk"
|
|
)
|
|
|
|
// InvokeWebhook routes an inbound webhook to id's live subprocess via the
|
|
// runtime manager's RemotePlugin.HandleWebhook RPC. Used by
|
|
// POST/GET /api/plugins/:id/webhooks/:key.
|
|
func (s *Service) InvokeWebhook(ctx context.Context, id string, req *pluginsdk.WebhookRequest) (*pluginsdk.WebhookResponse, error) {
|
|
remote, ok := s.pluginRemote(id)
|
|
if !ok {
|
|
return nil, fmt.Errorf("plugins: plugin %q is not running", id)
|
|
}
|
|
return remote.HandleWebhook(ctx, req)
|
|
}
|
|
|
|
// pluginRemote returns the live RemotePlugin for id, if the runtime manager
|
|
// is wired and currently tracking a running process for it.
|
|
func (s *Service) pluginRemote(id string) (*pluginsdk.RemotePlugin, bool) {
|
|
if s.runtime == nil {
|
|
return nil, false
|
|
}
|
|
return s.runtime.Get(id)
|
|
}
|