aboutsummaryrefslogtreecommitdiff
path: root/opencode
diff options
context:
space:
mode:
Diffstat (limited to 'opencode')
-rwxr-xr-xopencode/scripts/test-hello-tool.sh6
-rw-r--r--opencode/tools/files_of_intrigue.ts16
-rw-r--r--opencode/tools/hello.ts15
-rw-r--r--opencode/tools/live_read.ts27
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
+ },
+})