diff options
Diffstat (limited to 'opencode')
| -rwxr-xr-x | opencode/scripts/test-hello-tool.sh | 6 | ||||
| -rw-r--r-- | opencode/tools/files_of_intrigue.ts | 16 | ||||
| -rw-r--r-- | opencode/tools/hello.ts | 15 | ||||
| -rw-r--r-- | opencode/tools/live_read.ts | 27 |
4 files changed, 64 insertions, 0 deletions
diff --git a/opencode/scripts/test-hello-tool.sh b/opencode/scripts/test-hello-tool.sh new file mode 100755 index 0000000..d51c621 --- /dev/null +++ b/opencode/scripts/test-hello-tool.sh @@ -0,0 +1,6 @@ +#!/bin/bash +export OPENCODE_CONFIG_DIR="/home/rahm/Projects/hobs.nvim/opencode" + +opencode run 'You are testing a custom OpenCode tool. Use the live_read tool to retrieve and print the contents of the current neovim buffer.' +# opencode run 'You are testing a custom OpenCode tool. Look for interesting files in the repo and call the files_of_intrigue tool to document them.' +# opencode run 'You are testing a custom OpenCode tool. You MUST call the hello tool exactly once with the name "Josh". After the tool returns, reply with exactly the tool result and nothing else.' diff --git a/opencode/tools/files_of_intrigue.ts b/opencode/tools/files_of_intrigue.ts new file mode 100644 index 0000000..43bae61 --- /dev/null +++ b/opencode/tools/files_of_intrigue.ts @@ -0,0 +1,16 @@ +import { tool } from "@opencode-ai/plugin" + +export default tool({ + description: "Use this tool when you found an interesting file", + + args: { + filepath: tool.schema.string().describe("The file path of an interesting file."), + description: tool.schema.string().describe("Why is this file intriguing"), + }, + + async execute(args) { + const message = `FILE OF INTRIGUE ${Date.now()}: ${args.filepath}, because ${args.description}!` + console.error(`[hobs.nvim] intrigue files =${JSON.stringify(args.filepath)}`) + return message + }, +}) diff --git a/opencode/tools/hello.ts b/opencode/tools/hello.ts new file mode 100644 index 0000000..0b49316 --- /dev/null +++ b/opencode/tools/hello.ts @@ -0,0 +1,15 @@ +import { tool } from "@opencode-ai/plugin" + +export default tool({ + description: "Say hello to a person. Use this tool when explicitly asked to call the hello tool.", + + args: { + name: tool.schema.string().describe("The name of the person to greet"), + }, + + async execute(args) { + const message = `HELLO_TOOL_CALLED ${Date.now()}: Hello, ${args.name}!` + console.error(`[hobs.nvim] hello tool called with name=${JSON.stringify(args.name)}`) + return message + }, +}) diff --git a/opencode/tools/live_read.ts b/opencode/tools/live_read.ts new file mode 100644 index 0000000..2174015 --- /dev/null +++ b/opencode/tools/live_read.ts @@ -0,0 +1,27 @@ +import { tool } from "@opencode-ai/plugin" + +export default tool({ + description: "Read the current live Neovim buffer. Use this instead of read when you need the current unsaved contents of the user's active buffer.", + + args: {}, + + async execute() { + const nvim = process.env.NVIM + + if (!nvim) { + throw new Error("$NVIM is not set; live_read must be run from a Neovim-spawned OpenCode process") + } + + const expr = `join(getline(1, "$"), "\n")` + console.error(`[hobs.nvim] live_read tool called =${expr} =${nvim}`) + + // const result = await Bun.$`echo "hello, there"`.text() + const result = + await Bun.$`nvim --headless --server ${nvim} --remote-expr ${expr}`.text() + + console.error(`live tool returned ${result}`) + console.error(`done`) + + return result + }, +}) |