feat(issue): 添加查询 Issue 列表功能,更新完成 Issue 的状态处理,版本升级至 0.0.6

This commit is contained in:
2026-01-29 13:23:17 +08:00
parent e15cf4f7be
commit 86b24cc9ef
3 changed files with 55 additions and 6 deletions

View File

@@ -1,3 +1,50 @@
import { createSkill, tool } from '@kevisual/router';
import { app, cnb } from '../../app.ts';
// 查询 Issue 列表 repo是 kevisual/kevisual
app.route({
path: 'cnb',
key: 'list-issues',
description: '查询 Issue 列表, 参数 repo, state, keyword, labels, page, page_size 等',
middleware: ['auth'],
metadata: {
tags: ['opencode'],
...createSkill({
skill: 'list-issues',
title: '查询 Issue 列表',
args: {
repo: tool.schema.string().describe('代码仓库名称, 如 my-user/my-repo'),
state: tool.schema.string().optional().describe('Issue 状态open 或 closed'),
keyword: tool.schema.string().optional().describe('问题搜索关键词'),
labels: tool.schema.string().optional().describe('问题标签,多个用逗号分隔'),
page: tool.schema.number().optional().describe('分页页码,默认: 1'),
page_size: tool.schema.number().optional().describe('分页每页大小,默认: 30'),
order_by: tool.schema.string().optional().describe('排序方式,如 created_at, -updated_at'),
},
summary: '查询 Issue 列表',
})
}
}).define(async (ctx) => {
const repo = ctx.query?.repo;
const state = ctx.query?.state;
const keyword = ctx.query?.keyword;
const labels = ctx.query?.labels;
const page = ctx.query?.page ? Number(ctx.query.page) : undefined;
const page_size = ctx.query?.page_size ? Number(ctx.query.page_size) : undefined;
const order_by = ctx.query?.order_by;
if (!repo) {
ctx.throw(400, '缺少参数 repo');
}
const params: Record<string, any> = {};
if (state) params.state = state;
if (keyword) params.keyword = keyword;
if (labels) params.labels = labels;
if (page) params.page = page;
if (page_size) params.page_size = page_size;
if (order_by) params.order_by = order_by;
const res = await cnb.issue.getList(repo, params);
ctx.forward(res);
}).addTo(app);