ocrag/opencode-plugin/ocrag-plugin.ts

43 lines
1.5 KiB
TypeScript

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}`;
}
},
}),
}),
});