From d08e58279db42b9892ad32e0fd8cdf086b4027d5 Mon Sep 17 00:00:00 2001 From: adamdottv <2363879+adamdottv@users.noreply.github.com> Date: Thu, 1 May 2025 06:26:20 -0500 Subject: feat: lsp discovery --- internal/llm/tools/lsp.go | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 internal/llm/tools/lsp.go (limited to 'internal/llm/tools') diff --git a/internal/llm/tools/lsp.go b/internal/llm/tools/lsp.go new file mode 100644 index 000000000..c2b4b04f3 --- /dev/null +++ b/internal/llm/tools/lsp.go @@ -0,0 +1,49 @@ +package tools + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/opencode-ai/opencode/internal/lsp/discovery/tool" +) + +// ConfigureLspServerTool is a tool for configuring LSP servers +type ConfigureLspServerTool struct{} + +// NewConfigureLspServerTool creates a new ConfigureLspServerTool +func NewConfigureLspServerTool() *ConfigureLspServerTool { + return &ConfigureLspServerTool{} +} + +// Info returns information about the tool +func (t *ConfigureLspServerTool) Info() ToolInfo { + return ToolInfo{ + Name: "configureLspServer", + Description: "Searches for an LSP server for the given language", + Parameters: map[string]any{ + "language": map[string]any{ + "type": "string", + "description": "The language identifier (e.g., \"go\", \"typescript\", \"python\")", + }, + }, + Required: []string{"language"}, + } +} + +// Run executes the tool +func (t *ConfigureLspServerTool) Run(ctx context.Context, params ToolCall) (ToolResponse, error) { + result, err := tool.ConfigureLspServer(ctx, json.RawMessage(params.Input)) + if err != nil { + return NewTextErrorResponse(err.Error()), nil + } + + // Convert the result to JSON + resultJSON, err := json.MarshalIndent(result, "", " ") + if err != nil { + return NewTextErrorResponse(fmt.Sprintf("Failed to marshal result: %v", err)), nil + } + + return NewTextResponse(string(resultJSON)), nil +} + -- cgit v1.2.3