import { app, cnb } from '../../app.ts'; import { createSkill, Skill } from '@kevisual/router' import { tool } from "@opencode-ai/plugin/tool" app.route({ path: 'cnb', key: 'create-repo', description: '创建代码仓库, 参数name, visibility, description', middleware: ['auth'], metadata: { tags: ['opencode'], ...createSkill({ skill: 'create-repo', title: '创建代码仓库', args: { name: tool.schema.string().describe('代码仓库名称'), description: tool.schema.string().describe('代码仓库描述'), }, summary: '创建一个新的代码仓库', }) } }).define(async (ctx) => { const name = ctx.query?.name; const visibility = ctx.query?.visibility ?? 'private'; const description = ctx.query?.description ?? ''; if (!name) { ctx.throw(400, '缺少参数 name'); } const res = await cnb.repo.createRepo(cnb.group, { name, visibility, description, }); ctx.forward(res); }).addTo(app); app.route({ path: 'cnb', key: 'create-repo-file', description: '在代码仓库中创建文件, 参数repoName, path, content, encoding', middleware: ['auth'], metadata: { tags: ['opencode'], ...createSkill({ skill: 'create-repo-file', title: '在代码仓库中创建文件', args: { repoName: tool.schema.string().describe('代码仓库名称'), path: tool.schema.string().describe('文件路径, 如 src/index.ts'), content: tool.schema.string().describe('文件内容'), encoding: tool.schema.string().describe('编码方式, 默认为 raw').optional(), }, summary: '在代码仓库中创建文件', }) } }).define(async (ctx) => { const repoName = ctx.query?.repoName; const path = ctx.query?.path; const content = ctx.query?.content; const encoding = ctx.query?.encoding ?? 'raw'; if (!repoName || !path || !content) { ctx.throw(400, '缺少参数 repoName, path 或 content'); } const res = await cnb.repo.createCommit(repoName, { message: `添加文件 ${path} 通过 API `, files: [ { path, content, encoding }, ], }); ctx.forward(res); }).addTo(app);