summaryrefslogtreecommitdiffhomepage
path: root/internal/llm/tools
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-05-01 06:26:20 -0500
committeradamdottv <[email protected]>2025-05-01 06:26:20 -0500
commitd08e58279db42b9892ad32e0fd8cdf086b4027d5 (patch)
treee1f4b40f6afebfa46eaef6c863cc7d4d5ff1a4c6 /internal/llm/tools
parent7bc542abff85d18112b3e61556659a496d6dc668 (diff)
downloadopencode-d08e58279db42b9892ad32e0fd8cdf086b4027d5.tar.gz
opencode-d08e58279db42b9892ad32e0fd8cdf086b4027d5.zip
feat: lsp discovery
Diffstat (limited to 'internal/llm/tools')
-rw-r--r--internal/llm/tools/lsp.go49
1 files changed, 49 insertions, 0 deletions
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
+}
+