This commit is contained in:
2025-12-16 10:38:12 +08:00
parent a050a8ec17
commit 7c963c3457
6 changed files with 76 additions and 2 deletions

View File

@@ -2,7 +2,7 @@
$: $:
vscode: vscode:
- docker: - docker:
image: docker.cnb.cool/kevisual/node24:latest image: docker.cnb.cool/kevisual/dev-env:latest
services: services:
- vscode - vscode
- docker - docker

23
src/ai/index.ts Normal file
View File

@@ -0,0 +1,23 @@
import { CNBCore, CNBCoreOptions, RequestOptions, Result } from "../cnb-core.ts";
type AiOptions = CNBCoreOptions<{
group?: string;
}>
class AiBase extends CNBCore {
group: string;
constructor(options: AiOptions) {
super({ token: options.token, cookie: options.cookie });
this.group = options.group || '';
}
autoPr(repo: string, data: { body: string, branch?: string, title: string }): Promise<Result<any>> {
const group = this.group || '';
const url = `/${group}/${repo}/-/build/ai/auto-pr`;
const postData = {
...data,
branch: data.branch || 'refs/heads/main',
title: data.title || ''
};
return this.post({ url, data: postData });
}
}
export { AiBase };

View File

@@ -16,4 +16,40 @@ export class User extends CNBCore {
useCookie: true, useCookie: true,
}); });
} }
createAccessToken(data?: { description?: string, scope?: string }): Promise<AccessTokenResponse> {
const scope = data?.scope || 'mission-manage:rw,mission-delete:rw,group-delete:rw,group-manage:rw,group-resource:rw,account-engage:rw,account-email:r,account-profile:rw,registry-delete:rw,registry-manage:rw,registry-package-delete:rw,registry-package:rw,repo-security:r,repo-delete:rw,repo-manage:rw,repo-basic-info:r,repo-cnb-detail:rw,repo-cnb-history:r,repo-cnb-trigger:rw,repo-commit-status:rw,repo-contents:rw,repo-notes:rw,repo-issue:rw,repo-pr:rw,repo-code:rw'
const url = 'https://cnb.cool/user/personal_access_tokens'
return this.post({
url,
useCookie: true,
data: {
description: data?.description || 'Created at ' + new Date().toISOString(),
scope: scope,
}
})
}
getAccessTokens(params?: { page?: number, page_size?: number }): Promise<AccessTokenResponse[]> {
const url = 'https://cnb.cool/user/personal_access_tokens'
return this.get({
url,
useCookie: true,
params: {
...params,
page: params?.page || 1,
page_size: params?.page_size || 20,
}
})
}
deleteAccessToken(tokenId: string): Promise<any> {
const url = `https://cnb.cool/user/personal_access_tokens/${tokenId}`
return this.delete({
url,
useCookie: true,
})
}
}
type AccessTokenResponse = {
token: string;
description: string;
} }

12
test/ai.ts Normal file
View File

@@ -0,0 +1,12 @@
import { AiBase } from "../src/ai/index.ts";
import { token, showMore, cookie } from "./common.ts";
const repo = new AiBase({ group: "kevisual/demo", token: token, cookie: cookie });
const res = await repo.autoPr("test-cnb", {
body: "请帮我给README文件添加一句问候语",
title: "给README添加问候语",
});
console.log("res", showMore(res));

View File

@@ -4,7 +4,6 @@ import util from 'node:util';
dotenv.config(); dotenv.config();
export const token = process.env.CNB_TOKEN || ""; export const token = process.env.CNB_TOKEN || "";
export const cookie = process.env.CNB_COOKIE || ""; export const cookie = process.env.CNB_COOKIE || "";
console.log("Using CNB_TOKEN:", token.slice(0, 4) + "****", cookie);
export const cnb = new CNB({ token, cookie }); export const cnb = new CNB({ token, cookie });
export const showMore = (obj: any) => { export const showMore = (obj: any) => {
return util.inspect(obj, { showHidden: false, depth: null, colors: true }); return util.inspect(obj, { showHidden: false, depth: null, colors: true });

View File

@@ -7,3 +7,7 @@ const user = new User({ token: token, cookie: cookie });
const currentUser = await user.getCurrentUser(); const currentUser = await user.getCurrentUser();
console.log("currentUser", showMore(currentUser)); console.log("currentUser", showMore(currentUser));
// const accessToken = await user.createAccessToken({ description: "Test Token from API" });
// console.log("accessToken", showMore(accessToken));