人工智能AI AgentAgent 编排RPA后端前端企业应用【免费下载链接】astron-agentEnterprise-grade, commercial-friendly agentic workflow platform for building next-generation SuperAgents.项目地址https://gitcode.com/gh_mirrors/as/astron-agent点击查看免费下载本篇文章以 console/frontend/CLAUDE.md 为核心脉络系统拆解 astron-agent 项目控制台前端console的完整工程体系从开发命令、构建链路到认证鉴权、多空间架构、国际化、HTTP 请求层与状态管理。读完本文你将掌握这套面向企业级 AI Agent 平台的前端是如何组织代码、处理 SSO 登录、隔离个人/企业空间、以及如何在不同环境开发/测试/生产下完成配置与部署的。一、工程定位与技术栈console/frontend 是 astron-agent 项目的控制台前端一个基于Vite React 18 TypeScript构建的浏览器端管理界面承担 AI Agent 平台的管理、编排与协作职能。它并非简单的 CRUD 后台而是包含智能体管理、工作流可视化编排、模型管理、发布管理、插件商店、资源管理等一整套业务能力的复杂单页应用。核心依赖以 console/frontend/package.json 为准领域选型版本构建工具ViteReact 插件^5.4.0UI 框架React^18.2.0组件库Ant Designantd5.19.1路由React Routerv6.22.3并引入 react-router 7.7.0全局状态Zustandpersist 中间件^5.0.3辅助状态Recoil recoil-persist^0.7.7国际化i18next i18next-browser-languagedetector^23.10.1认证casdoor-js-sdk^0.16.0HTTPAxios拦截器体系1.6.2可视化ReactFlow、ECharts、Monaco Editor—这种选型组合决定了工程的两个基本特征构建快速、模块清晰Vite 路径别名 路由级懒加载以及企业级能力前置SSO 登录、多空间隔离、权限模型、国际化。二、开发与构建命令体系CLAUDE.md 中给出了完整的命令矩阵以下是结合实际 package.json 脚本的展开说明2.1 启动开发服务器npm run dev # 启动开发服务器热更新端口 3000 npm run test # 以 test 模式启动测试服务器仅监听 localhostdev脚本实际执行vite --mode development --hosttest脚本执行vite --mode test --host localhost。两者差异在于 Vite 的mode不同会加载不同的.env.${mode}环境文件见第六节。2.2 构建产物npm run build # 生产构建vite build --mode production npm run build:dev # 开发环境构建 npm run build:test # 测试环境构建 npm run build-demo # Demo 环境构建 npm run preview # 本地预览生产构建产物仓库还提供了build-dev、build-prod、build-test等同义脚本。注意 Docker 构建使用的是npm run build-prod见 console/frontend/Dockerfile。2.3 代码质量与静态检查npm run lint # ESLint 检查覆盖 **/*.{ts,tsx} npm run lint:fix # 自动修复 ESLint 错误 npm run format # Prettier 格式化 npm run format:check # 检查是否已格式化 npm run type-check # TypeScript 类型检查tsc --noEmit npm run quality # 一键执行 format:check lint type-check除此之外仓库还提供npm run test:unitnode --test --loader ts-node/esm用于运行 console/frontend/tests下的单元测试文件。2.4 依赖安装说明Dockerfile 中使用npm ci --legacy-peer-deps安装依赖以保证可复现构建同时仓库保留了package-lock.json与pnpm-lock.yaml两份锁文件本地开发可按团队约定选择 npm 或 pnpm。三、认证与授权Casdoor SSO PKCE 流程前端通过Casdoor JS SDK实现 SSO 单点登录采用PKCE授权码模式。这是整个平台的入口安全屏障也是 CLAUDE.md 中列为第一位的架构模式。3.1 SDK 初始化与配置读取src/config/casdoor.ts 中初始化 SDKexport const casdoorSdk new Sdk({ serverUrl: getRuntimeCasdoorUrl(), clientId: getRuntimeCasdoorClientId(), appName: getRuntimeCasdoorAppName(), organizationName: getRuntimeCasdoorOrgName(), redirectPath: /callback, signinPath: /api/signin, });值得注意的细节是四个配置项的取值优先级运行时注入的window.__APP_CONFIG__优先于编译期环境变量环境变量优先于兜底值。以getRuntimeCasdoorUrl为例先检查window.__APP_CONFIG__.CASDOOR_URL再回退到import.meta.env.CONSOLE_CASDOOR_URL与VITE_CASDOOR_SERVER_URL最后兜底http://localhost:3000。这种运行时配置优先的设计使同一份构建产物可以通过部署时注入配置适配不同环境详见第六节。3.2 登录回调与 Token 存储登录成功后 Casdoor 重定向到/callback路由src/pages/callback/index.tsx 调用casdoorSdk.exchangeForAccessToken()换取 access_token 与 refresh_token写入localStorage随后跳转到sessionStorage中保存的来源页postLoginRedirect。SDK 还提供saveTokenFromResponse/isGetTokenSuccessful辅助函数以及parseCurrentUserFromToken——从 JWT 的 payload 中解析出昵称、头像、uid 等用户信息避免登录后多一次接口往返。3.3 自动刷新 Token 与请求拦截src/utils/http.ts 实现了完整的令牌生命周期管理通过decodeJwtExp解码 JWT 的exp字段isAccessTokenExpired判断过期时提前 30 秒触发刷新刷新动作由casdoorSdk.refreshAccessToken(refreshToken)完成并使用refreshingPromise全局变量保证并发请求只触发一次刷新单飞模式刷新成功后回写localStorage失败则清空本地令牌。if (currentRefreshToken isAccessTokenExpired(currentAccessToken)) { if (!refreshingPromise) { refreshingPromise casdoorSdk .refreshAccessToken(currentRefreshToken) .then(/* 写回新 token */) .catch(/* 清除 token */) .finally(() { refreshingPromise null; }); } await refreshingPromise; }3.4 登出与权限模型登出由performLogout完成清除本地 token 后携带clientId与post_logout_redirect_uri跳转到 Casdoor 的/logout端点。在授权层面仓库实现了一套前端权限矩阵src/types/permission.ts src/permissions/utils.ts空间类型分为personal个人与team企业角色分为owner、admin、member、visitor、super_admin、space_admin操作权限细化为 view / create / edit / delete / publish / use / manage 及空间管理相关动作hasModulePermission通过查找角色配置表判定某模块某操作是否放行并支持ownResourcesOnly这类资源级限制。src/hooks/use-permissions.ts 将这些能力封装为canView、canCreate、canEditResource等一组可直接在组件中调用的检查方法。四、多空间架构个人空间与企业空间平台同时面向个人用户与团队/企业组织这一需求催生了多空间Multi-Space架构所有业务数据都隶属于某个空间所有 API 请求都携带空间上下文。4.1 空间状态的单一来源空间上下文由 src/store/space-store.tsZustand persist 中间件统一管理字段包括spaceId、spaceName、spaceTypepersonal/team、enterpriseId、enterpriseName、spaceAvatar。该 store 持久化到sessionStorage存储名space-storage通过partialize只保留核心字段避免整棵状态树被序列化。4.2 空间切换逻辑src/hooks/use-space-type.ts 封装了全部空间操作switchToPersonal清空企业上下文切回个人空间handleTeamSwitch切换企业团队空间时先尝试getLastVisitSpace恢复最近访问空间否则从getJoinedCorporateList中取第一个空间作为默认空间并调用visitSpace上报访问记录getLastVisitSpaceInfo应用启动时恢复上次访问的空间。应用入口 src/app.tsx 在初始化阶段调用getLastVisitSpace用sessionStorage.lastVisitSpaceDone保证每个会话只执行一次、getEnterpriseSpaceCount、getJoinedEnterpriseList并监听enterpriseId变化触发visitEnterprise——这意味着切换企业后页面上下文会整体刷新。4.3 空间上下文如何到达后端所有 API 请求包括 SSE 流式请求都会自动带上空间标识普通请求请求拦截器在 src/utils/http.ts 中为每个请求头附加space-id当spaceType team时额外附加enterprise-id文件下载downloadFileWithHeaders 用 XHR 以 blob 方式下载同样携带space-id、enterprise-id与Authorization头SSE 流src/utils/sse-request.ts 的fetchSseWithContext在每次请求前通过getContext()动态构造Accept-Language、authorization、space-id、enterprise-id头——因为 SSE 连接是长连接必须确保建立连接时携带正确的上下文。企业维度的数据则由 src/store/enterprise-store.ts 承载企业信息、已加入企业列表、空间统计通过 src/hooks/use-enterprise.ts 提供拉取与缓存方法。五、国际化i18n实现平台面向中英文用户国际化贯穿 UI 与请求两层。5.1 语言检测与存储src/locales/i18n/index.ts 基于 i18next 初始化语言检测顺序为localStorage中 Zustand persist 存储recoil-persist键里的locale字段localStorage的locale-storage键由 src/store/spark-store/locale-store.ts 写入浏览器语言getBrowserLanguage。load: languageOnly与lowerCaseLng: true确保zh-CN被归一化为zhen-US被归一化为en中文作为fallbackLng。语言切换由useLocaleStore.toggleLocale完成调用i18n.changeLanguage并持久化。5.2 语言如何影响渲染与请求渲染层src/main.tsx 根据i18n.language为ConfigProvider注入zhCN/en_GBlocale使 antd 组件含日期选择器配合dayjs/locale/zh-cn随语言切换同时 src/app.tsx 为document.documentElement设置lang-zh/lang-en类名请求层src/utils/http.ts 的getLanguageCode()将语言映射为zh-CN/en-US标准格式写入Accept-Language请求头并监听i18n.on(languageChanged)事件实时更新 axios 默认头保证后端能按语言返回本地化内容。翻译资源集中在 src/localeszh/en两个入口工作流节点等大模块的翻译键拆分说明见 src/locales/README.md。六、路由结构与页面组织6.1 路由表src/router/index.tsx 使用createBrowserRouter定义路由所有页面均通过React.lazySuspense懒加载fallback 为全局 Loading 组件与 CLAUDE.md 中给出的路由骨架一致/ # 根路径重定向到 /home /home # 首页 /management/bot-api # Bot API 管理 /management/model # 模型管理官方模型 /management/model/personalModel # 个人模型 /management/model/detail/:id # 模型详情 /management/release/* # 发布管理 /management/app # 应用列表 /management/platform-account # 平台账号管理 /resource/* # 资源管理 /space # 个人空间管理 /space/space-detail/:spaceId # 空间详情 /space/config/* # 空间配置页 /space/agent # 空间智能体 /enterprise/:enterpriseId/* # 企业空间管理 /store/plugin # 插件商店 /store/plugin/:id # 插件详情 /chat/:botId/:version? # 聊天界面 /work_flow/:id/arrange # 工作流编辑器 /work_flow/:id/overview # 工作流分析 /work_flow/:id/files # 工作流文件 /callback # 登录回调 /team/create/:type # 创建团队 /sharepage # 分享页注意/space存在多条并列路由分别挂载Layout、SpacePage、ConfigPage体现了同一路径下不同布局形态的共存/callback独立于主布局避免在鉴权回调时触发侧边栏等依赖登录态的组件。6.2 布局与页面拆分布局组件 src/layouts/index.tsx 使用react-error-boundary包裹崩溃边界并根据当前路径段knowledge、plugin、database、rpa、skill、sandbox、automation决定是否渲染顶部 Header。侧边栏 src/components/sidebar/index.tsx 管理会话列表、收藏智能体、消息通知等入口并通过eventBus与各页面联动如chatListChange、favoriteChange、createBot自定义事件。6.3 目录组织规范CLAUDE.md 定义了清晰的目录职责划分与仓库实际结构一致src/ ├── components/ # 可复用 UI 组件sidebar、modal、workflow 等 ├── pages/ # 路由级页面组件chat-page、workflow、model-management 等 ├── layouts/ # 布局组件sidebar、header 的组合容器 ├── hooks/ # 自定义 Hooksuse-space-type、use-enterprise、use-permissions 等 ├── store/ # 状态管理Zustand/Recoil stores ├── services/ # API 服务层agent.ts、flow.ts、knowledge.ts 等 31 个模块 ├── utils/ # 工具函数http.ts、sse-request.ts 等 ├── config/ # 配置文件casdoor.ts、monaco-config.ts 等 ├── locales/ # i18n 翻译资源 ├── styles/ # 全局样式与 Sass 文件 ├── types/ # TypeScript 类型定义含权限模型 └── permissions/ # 权限检查实现services层与types层一一对应每个业务域agent、workflow、model、knowledge、plugin、rpa、skill、sandbox、release、trace 等都有独立的 API 封装文件统一通过 src/utils/http.ts 导出的 axios 实例发起请求。七、HTTP 请求架构CLAUDE.md 对 HTTP 层的描述在 src/utils/http.ts 中有完整实现是整套前端最核心的基建之一。7.1 全局默认配置axios.defaults.timeout 30000; // 30 秒超时 axios.defaults.headers.common[X-Requested-With] XMLHttpRequest; axios.defaults.headers.common[Content-Type] application/json; axios.defaults.headers.common[web-v] packageJson.version; // 版本标识 axios.defaults.headers.common[Accept-Language] getLanguageCode();每个请求还会附加clientType: 11、Channel来自 cookie以及空间相关请求头。7.2 请求去重Pending Request 机制拦截器通过请求键 CancelToken实现并发去重generateReqKey由method url params data生成唯一键addPendingRequest在请求发出前登记removePendingRequest在请求结束或重复请求发起时取消先前未完成的同键请求防止同一接口被重复调用如用户快速点击导致的重复提交。7.3 响应拦截与错误处理响应处理分两条路径业务错误result.code ! 0交给initBusinessError按错误码分类处理——401跳转登录11120通过eventBus触发套餐用量耗尽弹窗80000/90000切换到个人空间并跳登录80001/80004及空间不存在提示后跳转/space/agent99900处理星火账号注销10004/10003处理封禁状态服务器错误HTTP 层交给initServerError对网络异常request.status 0与 401 分别给出本地化提示。7.4 Base URL 的多环境解析getBaseURL()的解析优先级如下生产模式mode production固定返回/console-api同域相对路径由 nginx 反向代理转发运行时注入的window.__APP_CONFIG__.BASE_URL浏览器为localhost时返回/xingchen-api走 Vite 代理环境变量CONSOLE_API_URL/VITE_BASE_URL按构建模式兜底到联调/测试服务器地址。这一设计保证了本地开发、内网联调、生产部署三种场景无需改动业务代码。八、状态管理模式前端采用分层混合的状态方案见 CLAUDE.md 第 7 节Store职责持久化user-store用户信息、登录态、角色设置否token 在 localStoragespace-store当前空间上下文personal/team是sessionStorageenterprise-store企业信息、已加入企业、空间统计否global-store全局应用状态视字段而定chat-store聊天界面状态消息流、会话是login-store登录弹窗与令牌管理部分locale-store语言状态是localStoragelocale-storage主要 store 均基于 Zustand 的create工厂配合persist/createJSONStorage中间件实现选择性持久化。用户侧状态 src/store/user-store.tsx 暴露getUserInfo调用/login域的getUserInfoMe、setUserRole、getUserRole、logOut等方法getIsLogin同时校验存在有效 token 且已获取用户信息。值得关注的是user-store中保存的spaceType/roleType/spaceId三元组正是 usePermissions 权限判断的输入——状态层与权限层通过这一契约解耦。九、环境配置与运行时注入9.1 环境文件仓库提供三个 Vite 环境文件.env.developmentCONSOLE_CASDOOR_URLhttp://47.242.221.161:18801、CONSOLE_CASDOOR_APPastronAgent、CONSOLE_CASDOOR_ORGbuilt-in、VITE_BASE_URLhttp://172.29.202.54:8080.env.test同时给出CONSOLE_*新变量与VITE_*旧变量互为回退VITE_BASE_URLhttp://172.29.201.92:8080.env.production全部留空生产配置依赖运行时注入。vite.config.js 中envPrefix: [CONSOLE_, VITE_]声明了环境变量的白名单前缀resolve.alias将映射到/src与 tsconfig 的paths: { /*: [src/*] }保持一致。9.2 关键环境变量变量作用CONSOLE_CASDOOR_URLCasdoor 认证服务器地址优先CONSOLE_CASDOOR_IDCasdoor 客户端 ID优先CONSOLE_CASDOOR_APPCasdoor 应用名优先CONSOLE_CASDOOR_ORGCasdoor 组织名优先VITE_CASDOOR_SERVER_URL/VITE_CASDOOR_CLIENT_ID/VITE_CASDOOR_APP_NAME/VITE_CASDOOR_ORG_NAME旧版变量回退VITE_BASE_URL/CONSOLE_API_URLAPI 基础地址9.3 运行时配置注入Runtime Config生产环境通过window.__APP_CONFIG__实现构建与配置分离docker-entrypoint.sh 在容器启动时读取环境变量CONSOLE_API_URL、CONSOLE_CASDOOR_URL、CONSOLE_CASDOOR_ID、CONSOLE_CASDOOR_APP、CONSOLE_CASDOOR_ORG均可回退到VITE_*旧变量经 JS 转义后写入/var/www/runtime-config.jswindow.__APP_CONFIG__ window.__APP_CONFIG__ || {}; window.__APP_CONFIG__.BASE_URL ...; window.__APP_CONFIG__.CASDOOR_URL ...; window.__APP_CONFIG__.CASDOOR_ID ...; window.__APP_CONFIG__.CASDOOR_APP ...; window.__APP_CONFIG__.CASDOOR_ORG ...;nginx 配置nginx.conf.template对runtime-config.js设置no-store禁止缓存而静态资源js/css/图片设置一年长缓存SPA 路由由try_files $uri $uri/ /index.html兜底。这套机制使同一镜像通过部署环境变量即可切换后端地址与认证中心无需重新构建。十、代码规范与质量保障ESLinteslint.config.js启用typescript-eslint、eslint-plugin-react、eslint-plugin-react-hooks、eslint-plugin-react-refresh等插件配合eslint-config-prettier消除与 Prettier 的规则冲突Prettier统一格式化ts/tsx/js/jsx/json/mdTypeScript 严格模式tsconfig.jsonstrict: true之下开启noImplicitAny、strictNullChecks、strictFunctionTypes、noUncheckedIndexedAccess、noImplicitReturns、noFallthroughCasesInSwitch、noImplicitOverride、allowUnreachableCode: false等近十项严格约束并开启isolatedModules、forceConsistentCasingInFileNames保证类型系统对企业级代码库的约束力路径别名/*统一映射src/*源码中可见大量/store/xxx、/utils/xxx引用质量门禁npm run quality一键串联格式化检查、Lint 与类型检查可接入 CI 作为合并前置条件。十一、关键能力依赖除核心框架外工程还集成了多项关键能力依赖均在 package.json 中Monaco Editormonaco-editor/reactmonaco-editor代码节点编辑能力src/config/monaco-config.ts 自定义主题并在入口main.tsx中设置custom-light-themeReactFlow工作流可视化编排的画布基础配套dagre实现节点自动布局src/components/workflow 下聚集了 110 个 tsx 组件支撑完整编排交互ECharts数据可视化监控、分析、统计图表Markdown 渲染链路markdown-itreact-markdownremark-gfmrehype-sanitizedompurifysanitize-html配合katex公式渲染聊天与工作流输出均走该链路且专门配置了消毒环节保证内容安全文件处理xlsxExcel、compressorjs/html2canvas-pro图片压缩与截图、react-qr-code二维码加密与安全crypto-js、jsencrypt、js-base64用于敏感数据的加解密与令牌解析SSE 流式通信microsoft/fetch-event-source承载聊天流式响应src/utils/sse-request.ts 在标准封装之上叠加了鉴权头与空间上下文注入。十二、小结astron-agent 的控制台前端是一个典型的企业级复杂中后台工程Vite 保证构建效率React 18 antd 提供 UI 底座Casdoor PKCE 流程解决身份认证多空间 store 请求头注入解决数据隔离i18next 贯穿渲染与请求两层解决国际化而 axios 拦截器体系去重、刷新、错误码映射为所有业务模块提供了统一、健壮的通信基座。CLAUDE.md 中的每一条架构约定都能在源码中找到对应实现这套文档与代码互证的工程组织方式也是理解该平台如何从登录到发布串起 Agent 全生命周期管理的最佳入口。若需进一步深入可沿 console/frontend/src 各目录、src/services 各 API 模块以及后端 core/workflow 与 core/agent 的服务实现继续阅读。赞分享人工智能AI AgentAgent 编排RPA后端前端企业应用【免费下载链接】astron-agentEnterprise-grade, commercial-friendly agentic workflow platform for building next-generation SuperAgents.项目地址https://gitcode.com/gh_mirrors/as/astron-agent点击查看免费下载相关推荐AI-Trader面向 AI 代理的全自动交易平台用 10 万美元模拟资金发布交易信号、复制仓位并验证策略AI Trader面向 AI 代理的全自动交易平台用 10 万美元模拟资金发布交易信号、复制仓位并验证策略 AI Trader 是一个面向 AI 代理的全自后端前端金融科技AI AgentAI 技能AI-Infra-Guard Web 前端完全指南基于 React 18 Vite 6 的 AI 基础设施安全平台可视化控制台AI Infra Guard Web 前端完全指南基于 React 18 Vite 6 的 AI 基础设施安全平台可视化控制台 AI Infra Guar人工智能AI 安全治理红蓝对抗AI Agent模型安全IntentKit 前端开发指南基于 Next.js 16 的 Agent 平台前端架构与实战IntentKit 前端开发指南基于 Next.js 16 的 Agent 平台前端架构与实战 IntentKit 前端是开源项目 intentkit htt人工智能AI Agent多智能体后端前端区块链Web3上一篇Powerline-Shell终极指南打造惊艳的终端提示符下一篇Layui多选下拉框踩坑实录3个解决方案让你少走弯路创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
从Dify到Continue:AI原生应用API编排与跨系统对接实战解析 把一整套RAG检索、模型调度、工具调用串成一个可复现的接口,这是这两年我做得最多的“杂活”。涉及的方案从自研状态机,到字节的Coze、阿里的百炼、开源的Dify,走了一圈,慢慢摸清了AI原生应用在API编排这条路上的很多暗坑。前两天… · 2026/9/25 2:48:38
TREG_TELEMETRY=0关闭treg遥测:隐私设置与数据收集说明 TREG_TELEMETRY0关闭treg遥测:隐私设置与数据收集说明 【免费下载链接】treg OpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn 项目地址: https://gitcode.com/GitHub_Trending/treg/treg
treg(tools-registry&… · 2026/9/25 3:28:21
Linux虚拟地址空间:从进程地图到内存管理的宏观认知 学Linux进程这一串概念的时候,虚拟地址空间是个绕不开又特别容易糊过去的坎。我第一次接触到这个词,是在一本操作系统的书里,看到那张经典的进程地址空间布局图——从代码段一路画到栈顶——当时的感觉就是:图看懂了,但… · 2026/9/25 3:28:15
权威安全报告解读方法论:从DBIR到ATTCK的技术落地 我无法生成该内容。原因如下:项目标题中提及的“Anthropic 2026年9月威胁情报报告”为虚构时间点(当前为2024年),且Anthropic公司官方从未发布过名为《争议报告》的公开文件,也无任何权威信源、新闻报道、技术白皮书或… · 2026/9/25 3:28:15
烽火HG680-J刷机全攻略:高安版与非高安版区分及当贝桌面安装 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:28:14
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37