import { tool, definePlugin } from "opencode"; import { z } from "zod"; export default definePlugin({ name: "ocrag-plugin", hooks: () => ({ rag_add: tool({ description: "向本地 RAG 知识库添加一个或多个代码文件或目录。添加后,后续搜索将包含这些代码。", parameters: { paths: z.array(z.string()).describe("要添加的文件或目录路径列表"), recursive: z.boolean().optional().describe("如果路径是目录,是否递归添加所有子文件"), }, execute: async (args) => { try { const paths = args.paths.join(" "); const recursiveFlag = args.recursive ? "--recursive" : ""; const cmd = `ocrag add ${paths} ${recursiveFlag}`; const result = Bun.$`${cmd}`.text(); return result; } catch (error) { return `Error: ${error.message}`; } }, }), rag_search: tool({ description: "在本地 RAG 知识库中执行语义搜索,返回与查询最相关的代码片段。", parameters: { query: z.string().describe("自然语言查询,例如:'如何实现用户认证'"), top_k: z.number().optional().default(5).describe("返回结果数量"), }, execute: async (args) => { try { const cmd = `ocrag search "${args.query}" --top-k ${args.top_k}`; const result = Bun.$`${cmd}`.text(); return result; } catch (error) { return `Error: ${error.message}`; } }, }), }), });