From b3708bd827ac91db846e669ffa6f4e4edd1c4128 Mon Sep 17 00:00:00 2001 From: Monster <389264167@qq.com> Date: Tue, 12 Aug 2025 10:38:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E7=9A=84=E4=BB=BB=E5=8A=A1=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E5=8E=9F=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/src/api/CodeSnippet.ts | 39 ++++++++++++++++++++++++- ui/src/api/OpenAiv1.ts | 34 ++++++++++++++++++++- ui/src/api/types.ts | 31 ++++++++++++++++++++ ui/src/components/codescan/taskList.tsx | 24 ++++++++------- 4 files changed, 115 insertions(+), 13 deletions(-) diff --git a/ui/src/api/CodeSnippet.ts b/ui/src/api/CodeSnippet.ts index 542e693..3da2815 100644 --- a/ui/src/api/CodeSnippet.ts +++ b/ui/src/api/CodeSnippet.ts @@ -11,7 +11,12 @@ */ import { ContentType, RequestParams } from "./httpClient"; -import { DomainCodeSnippet, V1GetContextReq, WebResp } from "./types"; +import { + DomainCodeSnippet, + V1GetContextReq, + V1GetSemanticContextReq, + WebResp, +} from "./types"; /** * @description 为IDE端提供代码片段上下文检索功能,使用API Key认证。支持单个查询和批量查询。 @@ -44,3 +49,35 @@ export const postGetContext = ( format: "json", ...params, }); + +/** + * @description 为IDE端提供代码片段语义搜索功能,使用API Key认证。通过向量相似性搜索找到相关的代码片段。 + * + * @tags CodeSnippet + * @name PostGetSemanticContext + * @summary IDE端语义搜索 + * @request POST:/api/v1/ide/codesnippet/semantic + * @secure + * @response `200` `(WebResp & { + data?: (DomainCodeSnippet)[], + +})` OK + */ + +export const postGetSemanticContext = ( + request: V1GetSemanticContextReq, + params: RequestParams = {}, +) => + request< + WebResp & { + data?: DomainCodeSnippet[]; + } + >({ + path: `/api/v1/ide/codesnippet/semantic`, + method: "POST", + body: request, + secure: true, + type: ContentType.Json, + format: "json", + ...params, + }); diff --git a/ui/src/api/OpenAiv1.ts b/ui/src/api/OpenAiv1.ts index 9b66563..8ae838f 100644 --- a/ui/src/api/OpenAiv1.ts +++ b/ui/src/api/OpenAiv1.ts @@ -15,9 +15,11 @@ import { DomainAcceptCompletionReq, DomainCreateSecurityScanningReq, DomainListSecurityScanningBriefResp, + DomainListSecurityScanningDetailResp, DomainListSecurityScanningReq, DomainModelListResp, DomainReportReq, + GetListSecurityScanningDetailParams, WebResp, } from "./types"; @@ -170,7 +172,7 @@ export const postReport = ( }); /** - * @description 分页逻辑只支持用 next_token + * @description 扫描任务列表 * * @tags OpenAIV1 * @name GetListSecurityScanning @@ -221,3 +223,33 @@ export const postCreateSecurityScanning = ( format: "json", ...params, }); + +/** + * @description 分页只支持 next_token; 首页传空,后续判断has_next_page是否为true,传入回包给的next_token + * + * @tags OpenAIV1 + * @name GetListSecurityScanningDetail + * @summary 获取扫描任务风险详情列表 + * @request GET:/v1/security/scanning/detail + * @response `200` `(WebResp & { + data?: DomainListSecurityScanningDetailResp, + +})` OK + */ + +export const getListSecurityScanningDetail = ( + query: GetListSecurityScanningDetailParams, + params: RequestParams = {}, +) => + request< + WebResp & { + data?: DomainListSecurityScanningDetailResp; + } + >({ + path: `/v1/security/scanning/detail`, + method: "GET", + query: query, + type: ContentType.Json, + format: "json", + ...params, + }); diff --git a/ui/src/api/types.ts b/ui/src/api/types.ts index b918c53..ad69672 100644 --- a/ui/src/api/types.ts +++ b/ui/src/api/types.ts @@ -259,6 +259,8 @@ export interface DomainCodeSnippet { definitionText?: string; /** 依赖项 */ dependencies?: string[]; + /** 向量嵌入 */ + embedding?: number[]; /** 结束列号 */ endColumn?: number; /** 结束行号 */ @@ -612,6 +614,13 @@ export interface DomainListSecurityScanningBriefResp { total_count?: number; } +export interface DomainListSecurityScanningDetailResp { + has_next_page?: boolean; + items?: DomainSecurityScanningRiskDetail[]; + next_token?: string; + total_count?: number; +} + export interface DomainListSecurityScanningReq { /** 作者 */ author?: string; @@ -826,6 +835,8 @@ export interface DomainReportReq { export interface DomainSecurityScanningBrief { /** 创建时间 */ created_at?: number; + /** 扫描任务id */ + id?: string; /** 报告url */ report_url?: string; /** 扫描状态 */ @@ -1207,6 +1218,15 @@ export interface V1GetContextReq { workspacePath?: string; } +export interface V1GetSemanticContextReq { + /** 返回结果数量限制,默认10 */ + limit?: number; + /** 搜索查询文本(必填) */ + query?: string; + /** 工作区路径(必填) */ + workspacePath?: string; +} + export interface V1Query { /** 编程语言(可选) */ language?: string; @@ -1617,3 +1637,14 @@ export interface GetGetWorkspaceFileByPathParams { /** 文件路径 */ path: string; } + +export interface GetListSecurityScanningDetailParams { + /** 扫描任务id */ + id?: string; + /** 下一页标识 */ + next_token?: string; + /** 分页 */ + page?: number; + /** 每页多少条记录 */ + size?: number; +} diff --git a/ui/src/components/codescan/taskList.tsx b/ui/src/components/codescan/taskList.tsx index 3a47758..7134752 100644 --- a/ui/src/components/codescan/taskList.tsx +++ b/ui/src/components/codescan/taskList.tsx @@ -121,17 +121,19 @@ const CodeScanTaskList = ({ ml: '4px' }}>扫描完成 } - {(record.status === 'failed') && - - 扫描失败 - } + {(record.status === 'failed') && + + + 扫描失败 + + } );