feat: 更新项目配置,修改项目名称和路径;增强项目 API,支持通过仓库克隆项目

This commit is contained in:
xiongxiao
2026-03-14 17:45:21 +08:00
committed by cnb
parent c27a16ed8d
commit 9607f84b5a
3 changed files with 94 additions and 99 deletions

View File

@@ -1,15 +1,15 @@
{ {
"name": "vite-react", "name": "code-graph",
"private": true, "private": true,
"version": "0.0.1", "version": "0.0.1",
"type": "module", "type": "module",
"basename": "/root/vite-react", "basename": "/root/code-graph",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build", "build": "vite build",
"preview": "vite preview", "preview": "vite preview",
"ui": "bunx shadcn@latest add ", "ui": "bunx shadcn@latest add ",
"pub": "envision deploy ./dist -k vite-react -v 0.0.1 -y y -u" "pub": "envision deploy ./dist -k code-graph -v 0.0.1 -y y -u"
}, },
"files": [ "files": [
"dist" "dist"

View File

@@ -9,6 +9,7 @@ const api = {
* @param data.filepath - {string} 项目根目录的绝对路径,必填 * @param data.filepath - {string} 项目根目录的绝对路径,必填
* @param data.repo - {string} 代码仓库标识,用于搜索结果展示和过滤,格式如 owner/repo例如 kevisual/cnb选填默认自动从 git 配置读取) * @param data.repo - {string} 代码仓库标识,用于搜索结果展示和过滤,格式如 owner/repo例如 kevisual/cnb选填默认自动从 git 配置读取)
* @param data.name - {string} 项目显示名称,用于搜索结果展示,选填(默认使用目录名) * @param data.name - {string} 项目显示名称,用于搜索结果展示,选填(默认使用目录名)
* @param data.type - {string} 项目类型,filepath或cnb-repo,默认为filepath
*/ */
"add": { "add": {
"path": "project", "path": "project",
@@ -21,12 +22,6 @@ const api = {
"type": "string", "type": "string",
"description": "项目根目录的绝对路径,必填" "description": "项目根目录的绝对路径,必填"
}, },
"type": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "项目类型filepath 表示本地文件路径cnb-repo 表示 CNB 仓库,选填(默认为 filepath",
"type": "string",
"optional": true
},
"repo": { "repo": {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "代码仓库标识,用于搜索结果展示和过滤,格式如 owner/repo例如 kevisual/cnb选填默认自动从 git 配置读取)", "description": "代码仓库标识,用于搜索结果展示和过滤,格式如 owner/repo例如 kevisual/cnb选填默认自动从 git 配置读取)",
@@ -38,16 +33,14 @@ const api = {
"description": "项目显示名称,用于搜索结果展示,选填(默认使用目录名)", "description": "项目显示名称,用于搜索结果展示,选填(默认使用目录名)",
"type": "string", "type": "string",
"optional": true "optional": true
},
"type": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "项目类型,filepath或cnb-repo,默认为filepath",
"type": "string",
"optional": true
} }
}, },
"viewItem": {
"api": {
"url": "/root/v1/cnb-dev"
},
"type": "api",
"title": "CNB_BOARD",
"routerStatus": "active"
},
"url": "/root/v1/cnb-dev", "url": "/root/v1/cnb-dev",
"source": "query-proxy-api" "source": "query-proxy-api"
} }
@@ -71,14 +64,6 @@ const api = {
"description": "要移除的项目根目录绝对路径,必填" "description": "要移除的项目根目录绝对路径,必填"
} }
}, },
"viewItem": {
"api": {
"url": "/root/v1/cnb-dev"
},
"type": "api",
"title": "CNB_BOARD",
"routerStatus": "active"
},
"url": "/root/v1/cnb-dev", "url": "/root/v1/cnb-dev",
"source": "query-proxy-api" "source": "query-proxy-api"
} }
@@ -102,14 +87,6 @@ const api = {
"description": "要暂停监听的项目根目录绝对路径,必填" "description": "要暂停监听的项目根目录绝对路径,必填"
} }
}, },
"viewItem": {
"api": {
"url": "/root/v1/cnb-dev"
},
"type": "api",
"title": "CNB_BOARD",
"routerStatus": "active"
},
"url": "/root/v1/cnb-dev", "url": "/root/v1/cnb-dev",
"source": "query-proxy-api" "source": "query-proxy-api"
} }
@@ -133,14 +110,6 @@ const api = {
"description": "要查询的项目根目录绝对路径,必填" "description": "要查询的项目根目录绝对路径,必填"
} }
}, },
"viewItem": {
"api": {
"url": "/root/v1/cnb-dev"
},
"type": "api",
"title": "CNB_BOARD",
"routerStatus": "active"
},
"url": "/root/v1/cnb-dev", "url": "/root/v1/cnb-dev",
"source": "query-proxy-api" "source": "query-proxy-api"
} }
@@ -153,14 +122,6 @@ const api = {
"key": "list", "key": "list",
"description": "列出所有已注册的项目及其当前运行状态(路径、仓库名称、监听是否活跃等)", "description": "列出所有已注册的项目及其当前运行状态(路径、仓库名称、监听是否活跃等)",
"metadata": { "metadata": {
"viewItem": {
"api": {
"url": "/root/v1/cnb-dev"
},
"type": "api",
"title": "CNB_BOARD",
"routerStatus": "active"
},
"url": "/root/v1/cnb-dev", "url": "/root/v1/cnb-dev",
"source": "query-proxy-api" "source": "query-proxy-api"
} }
@@ -229,13 +190,80 @@ const api = {
"optional": true "optional": true
} }
}, },
"viewItem": { "url": "/root/v1/cnb-dev",
"api": { "source": "query-proxy-api"
"url": "/root/v1/cnb-dev" }
}, },
"type": "api", /**
"title": "CNB_BOARD", * 初始化项目,通过root目录搜索当前有git的项目列表并将其注册到系统中
"routerStatus": "active" *
* @param data - Request parameters
* @param data.rootPath - {string} 搜索项目的根目录绝对路径,默认为 /workspace/projects
*/
"init": {
"path": "project",
"key": "init",
"description": "初始化项目,通过root目录搜索当前有git的项目列表并将其注册到系统中",
"metadata": {
"args": {
"rootPath": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "搜索项目的根目录绝对路径,默认为 /workspace/projects",
"type": "string",
"optional": true
}
},
"url": "/root/v1/cnb-dev",
"source": "query-proxy-api"
}
},
/**
* 列出当前工作区已注册的项目
*
* @param data - Request parameters
* @param data.rootPath - {string} 项目根目录绝对路径,默认为 /workspace/projects指定后只列出该目录下的项目
*/
"list-projects": {
"path": "project",
"key": "list-projects",
"description": "列出当前工作区已注册的项目",
"metadata": {
"args": {
"rootPath": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "项目根目录绝对路径,默认为 /workspace/projects指定后只列出该目录下的项目",
"type": "string",
"optional": true
}
},
"url": "/root/v1/cnb-dev",
"source": "query-proxy-api"
}
},
/**
* clone 一个项目到projects目录下并注册到系统中。
*
* @param data - Request parameters
* @param data.filepath - {string} 新项目根目录的绝对路径,默认在 /workspace/projects 下以仓库名创建子目录
* @param data.repo - {string} 代码仓库标识,用于搜索结果展示和过滤,格式如 owner/repo例如 kevisual/cnb必填
*/
"clone-cnb": {
"path": "project",
"key": "clone-cnb",
"description": "clone 一个项目到projects目录下并注册到系统中。",
"metadata": {
"args": {
"filepath": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "新项目根目录的绝对路径,默认在 /workspace/projects 下以仓库名创建子目录",
"type": "string",
"optional": true
},
"repo": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"description": "代码仓库标识,用于搜索结果展示和过滤,格式如 owner/repo例如 kevisual/cnb必填"
}
}, },
"url": "/root/v1/cnb-dev", "url": "/root/v1/cnb-dev",
"source": "query-proxy-api" "source": "query-proxy-api"
@@ -345,14 +373,6 @@ const api = {
"optional": true "optional": true
} }
}, },
"viewItem": {
"api": {
"url": "/root/v1/cnb-dev"
},
"type": "api",
"title": "CNB_BOARD",
"routerStatus": "active"
},
"url": "/root/v1/cnb-dev", "url": "/root/v1/cnb-dev",
"source": "query-proxy-api" "source": "query-proxy-api"
} }
@@ -378,14 +398,6 @@ const api = {
"description": "要读取的文件绝对路径,必填" "description": "要读取的文件绝对路径,必填"
} }
}, },
"viewItem": {
"api": {
"url": "/root/v1/cnb-dev"
},
"type": "api",
"title": "CNB_BOARD",
"routerStatus": "active"
},
"url": "/root/v1/cnb-dev", "url": "/root/v1/cnb-dev",
"source": "query-proxy-api" "source": "query-proxy-api"
} }
@@ -416,14 +428,6 @@ const api = {
"description": "文件内容的 base64 编码,必填" "description": "文件内容的 base64 编码,必填"
} }
}, },
"viewItem": {
"api": {
"url": "/root/v1/cnb-dev"
},
"type": "api",
"title": "CNB_BOARD",
"routerStatus": "active"
},
"url": "/root/v1/cnb-dev", "url": "/root/v1/cnb-dev",
"source": "query-proxy-api" "source": "query-proxy-api"
} }
@@ -485,14 +489,6 @@ const api = {
"optional": true "optional": true
} }
}, },
"viewItem": {
"api": {
"url": "/root/v1/cnb-dev"
},
"type": "api",
"title": "CNB_BOARD",
"routerStatus": "active"
},
"url": "/root/v1/cnb-dev", "url": "/root/v1/cnb-dev",
"source": "query-proxy-api" "source": "query-proxy-api"
} }
@@ -516,14 +512,6 @@ const api = {
"description": "要删除的文件绝对路径,必填" "description": "要删除的文件绝对路径,必填"
} }
}, },
"viewItem": {
"api": {
"url": "/root/v1/cnb-dev"
},
"type": "api",
"title": "CNB_BOARD",
"routerStatus": "active"
},
"url": "/root/v1/cnb-dev", "url": "/root/v1/cnb-dev",
"source": "query-proxy-api" "source": "query-proxy-api"
} }

View File

@@ -93,10 +93,17 @@ export const useCodeGraphStore = create<State>()((set, get) => ({
addProject: async (filepath, name, type = 'filepath') => { addProject: async (filepath, name, type = 'filepath') => {
try { try {
const url = get().url || API_URL; const url = get().url || API_URL;
const res = await projectApi.project.add( let res: Result | null = null;
if (type === 'filepath') {
res = await projectApi.project.add(
{ filepath, name: name || undefined, type }, { filepath, name: name || undefined, type },
{ url }, { url },
); );
} else {
res = await projectApi['project']['clone-cnb']({
repo: filepath,
}, { url });
}
if (res.code === 200) { if (res.code === 200) {
toast.success('项目添加成功'); toast.success('项目添加成功');
await get().loadProjects(); await get().loadProjects();