├── src ├── models │ ├── IsModifed.ts │ ├── global.ts │ ├── monaco.ts │ ├── model.ts │ ├── squareModel.ts │ └── applicationDev.ts ├── services │ ├── assistant.ts │ └── event.ts ├── components │ ├── base │ │ ├── Tabs │ │ │ └── index.tsx │ │ ├── EcoShareStatus │ │ │ └── index.less │ │ ├── McpStatus │ │ │ ├── index.less │ │ │ ├── images.constants.ts │ │ │ └── images │ │ │ │ └── icon_initialization.svg │ │ ├── SvgIcon │ │ │ └── styles.less │ │ ├── AgentType │ │ │ ├── images │ │ │ │ ├── icon_table.svg │ │ │ │ ├── icon_knowledge.svg │ │ │ │ └── icon_workflow.svg │ │ │ ├── images.constants.ts │ │ │ └── index.less │ │ ├── HoverScrollbar │ │ │ └── index.less │ │ ├── CopyButton │ │ │ └── index.less │ │ ├── AuthorInfo │ │ │ └── index.less │ │ ├── FileTypeIcon │ │ │ └── index.less │ │ ├── McpInstallType │ │ │ └── index.less │ │ ├── SecondMenuItem │ │ │ └── SubItem.tsx │ │ └── index.ts │ ├── AssistantOptimizeModal │ │ └── index.tsx │ ├── CustomFormModal │ │ └── index.less │ ├── LabelIcon │ │ ├── index.less │ │ └── index.tsx │ ├── CreateAgent │ │ └── index.less │ ├── custom │ │ ├── InfiniteScrollDiv │ │ │ └── index.less │ │ ├── TooltipIcon │ │ │ └── index.less │ │ ├── Loading │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── SelectList │ │ │ └── index.less │ │ └── CustomInputNumber │ │ │ └── index.less │ ├── SliderNumber │ │ └── index.less │ ├── AgentSidebar │ │ ├── TimedTask │ │ │ └── CreateTimedTask │ │ │ │ └── index.less │ │ ├── StatisticsInfo │ │ │ ├── index.less │ │ │ └── index.tsx │ │ └── AgentConversation │ │ │ └── HistoryConversation │ │ │ └── index.less │ ├── CreatedItem │ │ └── index.less │ ├── business-component │ │ ├── CopyToSpaceComponent │ │ │ └── index.less │ │ └── index.ts │ ├── LabelStar │ │ ├── index.less │ │ └── index.tsx │ ├── McpCollapseComponentList │ │ └── index.less │ ├── CreateWorkflow │ │ └── index.less │ ├── FormListItem │ │ ├── Reference.tsx │ │ └── components │ │ │ └── TreeColumnHeader.tsx │ ├── AgentChatEmpty │ │ └── index.less │ ├── PluginConfigTitle │ │ └── index.less │ ├── OverrideTextArea │ │ └── index.less │ ├── ParamsNameLabel │ │ ├── index.less │ │ └── index.tsx │ ├── SubmitButton │ │ └── index.less │ ├── SiteFooter │ │ ├── index.less │ │ └── index.tsx │ ├── EcosystemCard │ │ └── SharedIcon │ │ │ ├── index.less │ │ │ ├── images.constants.ts │ │ │ └── images │ │ │ └── icon_rejected.svg │ ├── ChatView │ │ ├── ChatSampleBottom │ │ │ └── index.less │ │ ├── AttachFile │ │ │ └── index.less │ │ ├── ChatBottomDebug │ │ │ └── index.less │ │ └── ChatBottomMore │ │ │ └── index.less │ ├── CreateKnowledge │ │ ├── SkillListEmpty │ │ │ ├── index.less │ │ │ └── index.tsx │ │ └── index.less │ ├── ExpandTextArea │ │ └── index.less │ ├── NoMoreDivider │ │ ├── index.less │ │ └── index.tsx │ ├── editableTitle │ │ └── index.less │ ├── PluginCardList │ │ └── index.less │ ├── CustomPopover │ │ └── index.less │ ├── VersionHistory │ │ ├── index.less │ │ └── PublishRecordItem │ │ │ └── index.less │ ├── ConditionRender │ │ └── index.tsx │ ├── ShowStand │ │ └── index.less │ ├── ChatTitleActions │ │ └── index.less │ ├── Card │ │ ├── CardFour │ │ │ └── index.less │ │ ├── CardTwo │ │ │ └── index.less │ │ ├── CardThree │ │ │ ├── index.less │ │ │ └── index.tsx │ │ └── CardOne │ │ │ └── index.less │ ├── EcosystemDetailDrawer │ │ └── ActivatedIcon.tsx │ ├── ModelSetting │ │ └── type.ts │ ├── TiptapVariableInput │ │ ├── index.ts │ │ └── hooks │ │ │ └── useMentionItems.ts │ ├── RecommendList │ │ └── index.less │ ├── MarkdownCustomProcess │ │ └── SeeDetailModal.less │ ├── CodeEditor │ │ └── index.less │ ├── UploadAvatar │ │ └── index.less │ ├── ChatInputHome │ │ └── ManualComponentItem │ │ │ └── index.less │ ├── MoveCopyComponent │ │ └── index.less │ └── ToggleWrap │ │ └── index.less ├── pages │ ├── 404 │ │ ├── index.less │ │ └── index.tsx │ ├── SpaceMcpManage │ │ └── McpComponentItem │ │ │ └── index.less │ ├── TeamSetting │ │ └── index.less │ ├── GlobalModelManage │ │ └── index.less │ ├── SpaceKnowledge │ │ ├── RawSegmentInfo │ │ │ ├── DocRename │ │ │ │ └── index.less │ │ │ └── index.less │ │ ├── LocalCustomDocModal │ │ │ ├── TextFill │ │ │ │ └── index.less │ │ │ ├── UploadFile │ │ │ │ └── index.less │ │ │ ├── DataProcess │ │ │ │ └── index.less │ │ │ └── CreateSet │ │ │ │ └── index.less │ │ ├── QaBatchModal │ │ │ └── index.less │ │ ├── index.less │ │ └── DocWrap │ │ │ ├── index.less │ │ │ └── DocItem │ │ │ └── index.less │ ├── SpaceLibrary │ │ ├── ComponentItem │ │ │ └── index.less │ │ └── CreateModel │ │ │ ├── IntranetModel │ │ │ ├── index.less │ │ │ └── index.tsx │ │ │ └── IntranetServerCommand │ │ │ └── index.less │ ├── AppDev │ │ └── components │ │ │ ├── ChatArea │ │ │ └── components │ │ │ │ └── AppDevMarkdownCMDWrapper │ │ │ │ └── index.less │ │ │ ├── DataResourceList │ │ │ └── index.less │ │ │ ├── ToggleDesignBtn │ │ │ └── index.less │ │ │ ├── index.ts │ │ │ └── PageEditModal │ │ │ └── index.less │ ├── SpaceDevelop │ │ ├── ApplicationItem │ │ │ ├── index.less │ │ │ ├── CollectStar │ │ │ │ └── index.less │ │ │ └── ApplicationHeader │ │ │ │ └── index.less │ │ └── AnalyzeStatistics │ │ │ └── index.less │ ├── EditAgent │ │ ├── AgentArrangeConfig │ │ │ ├── KnowledgeTextList │ │ │ │ ├── index.less │ │ │ │ └── KnowledgeSetting │ │ │ │ │ └── index.less │ │ │ ├── LongMemoryContent │ │ │ │ └── index.less │ │ │ ├── ConfigOptionsHeader │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ ├── EventList │ │ │ │ └── index.less │ │ │ ├── VariableList │ │ │ │ └── index.less │ │ │ ├── ComponentSettingModal │ │ │ │ ├── CardBind │ │ │ │ │ ├── index.less │ │ │ │ │ ├── CardModeSetting │ │ │ │ │ │ └── index.less │ │ │ │ │ └── BindDataSource │ │ │ │ │ │ └── index.less │ │ │ │ ├── InvokeType │ │ │ │ │ └── index.less │ │ │ │ ├── OutputWay │ │ │ │ │ └── index.less │ │ │ │ ├── AsyncRun │ │ │ │ │ └── index.less │ │ │ │ └── ExceptionHanding │ │ │ │ │ └── index.less │ │ │ ├── PageSettingModal │ │ │ │ ├── HomeIndex │ │ │ │ │ └── index.less │ │ │ │ └── VisibleToLLM │ │ │ │ │ └── index.less │ │ │ ├── EventBindModal │ │ │ │ └── index.less │ │ │ ├── OpenRemarksEdit │ │ │ │ ├── GuidQuestionSetModal │ │ │ │ │ └── index.less │ │ │ │ └── index.less │ │ │ ├── CreateVariables │ │ │ │ └── index.less │ │ │ └── index.less │ │ ├── AgentModelSetting │ │ │ └── index.less │ │ ├── DebugDetails │ │ │ └── NodeDetails │ │ │ │ └── index.less │ │ ├── ArrangeTitle │ │ │ └── index.less │ │ ├── PreviewAndDebug │ │ │ ├── index.less │ │ │ └── PreviewAndDebugHeader │ │ │ │ └── index.less │ │ └── SystemTipsWord │ │ │ └── index.less │ ├── SpaceTable │ │ ├── TableOperationBar │ │ │ └── index.less │ │ ├── AddAndModify │ │ │ └── index.less │ │ ├── index.less │ │ ├── StructureTable │ │ │ ├── ClearDataTooltip │ │ │ │ └── index.tsx │ │ │ └── index.less │ │ └── TableHeader │ │ │ └── index.less │ ├── SystemConfig │ │ ├── index.less │ │ └── BaseTab │ │ │ └── index.less │ ├── Chat │ │ ├── DropdownChangeName │ │ │ └── index.less │ │ └── ShowArea │ │ │ └── index.less │ ├── Square │ │ └── SquareComponentInfo │ │ │ └── index.less │ ├── SpaceLog │ │ ├── index.less │ │ ├── LogDetails │ │ │ └── NodeDetails │ │ │ │ └── index.less │ │ └── LogHeader │ │ │ └── index.less │ ├── Login │ │ └── SiteProtocol │ │ │ ├── index.less │ │ │ └── index.tsx │ ├── SpacePageDevelop │ │ ├── ReverseProxyModal │ │ │ └── ReverseProxyContentConfig │ │ │ │ └── index.less │ │ ├── PathParamsConfigModal │ │ │ └── PathParamsConfigContent │ │ │ │ └── index.less │ │ └── PageCreateModal │ │ │ └── index.less │ ├── Antv-X6 │ │ ├── component │ │ │ ├── nodeItem.less │ │ │ └── pluginNode.less │ │ └── components │ │ │ └── NewSkill │ │ │ └── SettingModal.less │ ├── Home │ │ └── DraggableHomeContent │ │ │ ├── constants.ts │ │ │ └── types.ts │ ├── SpaceMcpCreate │ │ ├── index.less │ │ └── McpHeader │ │ │ └── index.less │ ├── SpaceMcpEdit │ │ ├── index.less │ │ └── McpEditItem │ │ │ ├── index.less │ │ │ └── index.tsx │ └── SpacePluginTool │ │ └── index.less ├── assets │ ├── images │ │ ├── copy.png │ │ ├── logo.png │ │ ├── menu.png │ │ ├── pic.jpeg │ │ ├── avatar.png │ │ ├── robot.png │ │ ├── share.png │ │ ├── doc_image.jpg │ │ ├── mcp_image.png │ │ ├── personal.png │ │ ├── agent_image.png │ │ ├── debug_image.png │ │ ├── fold_image.png │ │ ├── home_image.png │ │ ├── iframe-copy.png │ │ ├── model_image.png │ │ ├── plugin_image.png │ │ ├── square_image.png │ │ ├── system_image.png │ │ ├── team_image.png │ │ ├── team_image1.png │ │ ├── database_image.png │ │ ├── guid_question.png │ │ ├── teach_material.png │ │ ├── variable_image.png │ │ ├── workflow_image.png │ │ ├── ecosystem_market.png │ │ ├── home_image_active.png │ │ ├── knowledge_image.png │ │ ├── send_image_gray.png │ │ ├── theme │ │ │ ├── nav-style1.png │ │ │ ├── nav-style2.png │ │ │ ├── dark-navbar-bg.png │ │ │ └── light-navbar-bg.png │ │ ├── workspace_image.png │ │ ├── agent_conversation.png │ │ ├── square_banner_image.png │ │ ├── square_image_active.png │ │ ├── system_image_active.png │ │ ├── square_banner_image2.png │ │ ├── teach_material_active.png │ │ ├── workspace_image_active.png │ │ └── ecosystem_market_active.png │ ├── icons │ │ ├── files │ │ │ ├── doc.png │ │ │ ├── pdf.png │ │ │ ├── ppt.png │ │ │ ├── excel.png │ │ │ └── media.png │ │ ├── chat │ │ │ ├── stop.svg │ │ │ ├── send.svg │ │ │ ├── add.svg │ │ │ ├── clock.svg │ │ │ ├── info.svg │ │ │ ├── chat.svg │ │ │ ├── close_regular.svg │ │ │ ├── collected.svg │ │ │ ├── close_fill.svg │ │ │ ├── user.svg │ │ │ ├── network.svg │ │ │ ├── close.svg │ │ │ └── copy.svg │ │ ├── design │ │ │ ├── border_width.svg │ │ │ ├── radius.svg │ │ │ ├── border_left.svg │ │ │ ├── border_top.svg │ │ │ ├── border_bottom.svg │ │ │ ├── border_right.svg │ │ │ ├── margin_top.svg │ │ │ ├── margin_bottom.svg │ │ │ ├── margin_right.svg │ │ │ ├── margin_left.svg │ │ │ ├── margin_vertical.svg │ │ │ ├── align_center.svg │ │ │ ├── align_justify.svg │ │ │ ├── align_left.svg │ │ │ ├── align_right.svg │ │ │ ├── margin_horizontal.svg │ │ │ ├── padding_bottom.svg │ │ │ ├── padding_left.svg │ │ │ ├── padding_right.svg │ │ │ ├── padding_top.svg │ │ │ ├── padding_vertical.svg │ │ │ ├── padding_horizontal.svg │ │ │ ├── opacity.svg │ │ │ ├── overline.svg │ │ │ ├── tabular_numbers.svg │ │ │ └── reset.svg │ │ ├── common │ │ │ ├── plus.svg │ │ │ ├── caret_up.svg │ │ │ ├── caret_down.svg │ │ │ ├── caret_left.svg │ │ │ ├── caret_right.svg │ │ │ ├── more.svg │ │ │ ├── arrow_down.svg │ │ │ ├── console.svg │ │ │ ├── import.svg │ │ │ ├── export.svg │ │ │ ├── straw.svg │ │ │ ├── delete.svg │ │ │ └── download.svg │ │ ├── nav │ │ │ ├── sidebar.svg │ │ │ ├── backward.svg │ │ │ ├── message.svg │ │ │ ├── square.svg │ │ │ ├── home.svg │ │ │ ├── user.svg │ │ │ ├── workspace.svg │ │ │ └── ecosystem.svg │ │ └── workspace │ │ │ └── knowledge.svg │ ├── ecosystem │ │ ├── activated.png │ │ ├── shared-offline.png │ │ ├── shared-release.png │ │ └── shared-reviewing.png │ └── svg │ │ ├── plus.svg │ │ ├── plus_icon.svg │ │ ├── icon_more.svg │ │ ├── icon_star_fill.svg │ │ └── icon_message.svg ├── types │ ├── enums │ │ ├── teamSetting.ts │ │ ├── ecosystemMarket.ts │ │ ├── event.ts │ │ ├── login.ts │ │ ├── theme.ts │ │ ├── square.ts │ │ ├── dataTable.ts │ │ ├── systemManage.ts │ │ ├── plugin.ts │ │ └── menus.ts │ ├── background.ts │ ├── interfaces │ │ ├── markdownRender.ts │ │ └── message.ts │ ├── global.d.ts │ └── declare.d.ts ├── constants │ ├── version.ts │ ├── event.constants.tsx │ ├── square.constants.ts │ ├── home.constants.ts │ └── codes.constants.ts ├── utils │ ├── monaco-python.js │ ├── form.tsx │ ├── mcp.ts │ ├── model.ts │ └── debounce.ts ├── layouts │ ├── MenusLayout │ │ ├── SpaceSection │ │ │ ├── SpaceTitle │ │ │ │ ├── CreateNewTeam │ │ │ │ │ └── index.less │ │ │ │ └── index.less │ │ │ ├── DevCollect │ │ │ │ └── index.less │ │ │ └── index.less │ │ ├── User │ │ │ ├── UserAction │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ │ └── UserAvatar │ │ │ │ ├── index.less │ │ │ │ └── index.tsx │ │ ├── SquareSection │ │ │ └── index.less │ │ ├── EcosystemMarketSection │ │ │ └── index.less │ │ ├── Header │ │ │ └── index.less │ │ └── UserRelAgent │ │ │ └── index.less │ ├── Setting │ │ ├── SettingEmail │ │ │ └── index.less │ │ ├── ResetPassword │ │ │ └── index.less │ │ ├── ThemeSwitchPanel.less │ │ └── SettingAccount │ │ │ └── index.less │ ├── InfiniteList │ │ └── index.less │ ├── MobileMenu.less │ └── Message │ │ └── index.less ├── access.ts ├── locales │ ├── en-US.ts │ └── zh-CN.ts ├── hooks │ ├── useSendCode.ts │ ├── useDisableSaveShortcut.ts │ ├── useEcoMarket.ts │ └── useTexts.ts ├── plugins │ └── ds-markdown-mermaid-plugin │ │ └── index.ts └── styles │ └── teamSetting.less ├── typings.d.ts ├── pnpm-workspace.yaml ├── public ├── Nd28jPGzj4.txt └── bg │ ├── bg-variant-1.png │ ├── bg-variant-2.png │ ├── bg-variant-3.png │ ├── bg-variant-4.png │ ├── bg-variant-5.png │ ├── bg-variant-6.png │ ├── bg-variant-7.png │ └── bg-variant-8.png ├── .env ├── .npmrc ├── tsconfig.json ├── .stylelintignore ├── .eslintrc.js ├── .stylelintrc.js ├── .prettierignore ├── config ├── config.production.ts └── config.development.ts ├── .husky ├── pre-commit └── commit-msg ├── .prettierrc ├── .lintstagedrc ├── k8s └── config │ ├── frontend-service.yaml │ ├── ingress.yaml │ └── frontend-deployment.yaml ├── mock └── userAPI.ts ├── .gitignore └── .claude └── settings.local.json /src/models/IsModifed.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/services/assistant.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/base/Tabs/index.tsx: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/AssistantOptimizeModal/index.tsx: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /typings.d.ts: -------------------------------------------------------------------------------- 1 | import '@umijs/max/typings'; 2 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'packages/*' -------------------------------------------------------------------------------- /public/Nd28jPGzj4.txt: -------------------------------------------------------------------------------- 1 | fff44fb98890e28214f69c2e7e26a669 -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | # file .env 2 | PORT=3000 3 | BABEL_CACHE=none 4 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | registry=https://registry.npmmirror.com/ 2 | 3 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./src/.umi/tsconfig.json" 3 | } 4 | -------------------------------------------------------------------------------- /src/components/CustomFormModal/index.less: -------------------------------------------------------------------------------- 1 | .btn { 2 | width: 100px; 3 | } 4 | -------------------------------------------------------------------------------- /src/components/LabelIcon/index.less: -------------------------------------------------------------------------------- 1 | .label-wrapper { 2 | width: 160px; 3 | } 4 | -------------------------------------------------------------------------------- /.stylelintignore: -------------------------------------------------------------------------------- 1 | # 忽略第三方生成的 CSS 文件 2 | public/sdk/tailwind_design_mode.all.css 3 | 4 | -------------------------------------------------------------------------------- /src/components/CreateAgent/index.less: -------------------------------------------------------------------------------- 1 | .segment { 2 | margin-bottom: 20px; 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/404/index.less: -------------------------------------------------------------------------------- 1 | .container { 2 | width: 100%; 3 | height: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: require.resolve('@umijs/max/eslint'), 3 | }; 4 | -------------------------------------------------------------------------------- /src/pages/SpaceMcpManage/McpComponentItem/index.less: -------------------------------------------------------------------------------- 1 | .time { 2 | line-height: 16px; 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/TeamSetting/index.less: -------------------------------------------------------------------------------- 1 | .container { 2 | width: 100%; 3 | height: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /.stylelintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: require.resolve('@umijs/max/stylelint'), 3 | }; 4 | -------------------------------------------------------------------------------- /public/bg/bg-variant-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/public/bg/bg-variant-1.png -------------------------------------------------------------------------------- /public/bg/bg-variant-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/public/bg/bg-variant-2.png -------------------------------------------------------------------------------- /public/bg/bg-variant-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/public/bg/bg-variant-3.png -------------------------------------------------------------------------------- /public/bg/bg-variant-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/public/bg/bg-variant-4.png -------------------------------------------------------------------------------- /public/bg/bg-variant-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/public/bg/bg-variant-5.png -------------------------------------------------------------------------------- /public/bg/bg-variant-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/public/bg/bg-variant-6.png -------------------------------------------------------------------------------- /public/bg/bg-variant-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/public/bg/bg-variant-7.png -------------------------------------------------------------------------------- /public/bg/bg-variant-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/public/bg/bg-variant-8.png -------------------------------------------------------------------------------- /src/assets/images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/copy.png -------------------------------------------------------------------------------- /src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/logo.png -------------------------------------------------------------------------------- /src/assets/images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/menu.png -------------------------------------------------------------------------------- /src/assets/images/pic.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/pic.jpeg -------------------------------------------------------------------------------- /src/components/custom/InfiniteScrollDiv/index.less: -------------------------------------------------------------------------------- 1 | .end-loading { 2 | line-height: 40px; 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/GlobalModelManage/index.less: -------------------------------------------------------------------------------- 1 | .container { 2 | width: 100%; 3 | height: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /src/pages/SpaceKnowledge/RawSegmentInfo/DocRename/index.less: -------------------------------------------------------------------------------- 1 | .input { 2 | width: 300px; 3 | } 4 | -------------------------------------------------------------------------------- /src/assets/images/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/avatar.png -------------------------------------------------------------------------------- /src/assets/images/robot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/robot.png -------------------------------------------------------------------------------- /src/assets/images/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/share.png -------------------------------------------------------------------------------- /src/components/SliderNumber/index.less: -------------------------------------------------------------------------------- 1 | .slider-box { 2 | width: 220px; 3 | margin-right: 20px; 4 | } 5 | -------------------------------------------------------------------------------- /src/assets/icons/files/doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/icons/files/doc.png -------------------------------------------------------------------------------- /src/assets/icons/files/pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/icons/files/pdf.png -------------------------------------------------------------------------------- /src/assets/icons/files/ppt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/icons/files/ppt.png -------------------------------------------------------------------------------- /src/assets/images/doc_image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/doc_image.jpg -------------------------------------------------------------------------------- /src/assets/images/mcp_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/mcp_image.png -------------------------------------------------------------------------------- /src/assets/images/personal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/personal.png -------------------------------------------------------------------------------- /src/pages/SpaceKnowledge/LocalCustomDocModal/TextFill/index.less: -------------------------------------------------------------------------------- 1 | .container { 2 | margin-top: 50px; 3 | } 4 | -------------------------------------------------------------------------------- /src/assets/ecosystem/activated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/ecosystem/activated.png -------------------------------------------------------------------------------- /src/assets/icons/files/excel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/icons/files/excel.png -------------------------------------------------------------------------------- /src/assets/icons/files/media.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/icons/files/media.png -------------------------------------------------------------------------------- /src/assets/images/agent_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/agent_image.png -------------------------------------------------------------------------------- /src/assets/images/debug_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/debug_image.png -------------------------------------------------------------------------------- /src/assets/images/fold_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/fold_image.png -------------------------------------------------------------------------------- /src/assets/images/home_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/home_image.png -------------------------------------------------------------------------------- /src/assets/images/iframe-copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/iframe-copy.png -------------------------------------------------------------------------------- /src/assets/images/model_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/model_image.png -------------------------------------------------------------------------------- /src/assets/images/plugin_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/plugin_image.png -------------------------------------------------------------------------------- /src/assets/images/square_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/square_image.png -------------------------------------------------------------------------------- /src/assets/images/system_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/system_image.png -------------------------------------------------------------------------------- /src/assets/images/team_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/team_image.png -------------------------------------------------------------------------------- /src/assets/images/team_image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/team_image1.png -------------------------------------------------------------------------------- /src/components/AgentSidebar/TimedTask/CreateTimedTask/index.less: -------------------------------------------------------------------------------- 1 | .select { 2 | width: 120px !important; 3 | } 4 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .umi 3 | .umi-production 4 | 5 | k8s 6 | Dockerfile 7 | devspace_start.sh 8 | 9 | *.yaml -------------------------------------------------------------------------------- /src/assets/images/database_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/database_image.png -------------------------------------------------------------------------------- /src/assets/images/guid_question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/guid_question.png -------------------------------------------------------------------------------- /src/assets/images/teach_material.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/teach_material.png -------------------------------------------------------------------------------- /src/assets/images/variable_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/variable_image.png -------------------------------------------------------------------------------- /src/assets/images/workflow_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/workflow_image.png -------------------------------------------------------------------------------- /src/assets/ecosystem/shared-offline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/ecosystem/shared-offline.png -------------------------------------------------------------------------------- /src/assets/ecosystem/shared-release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/ecosystem/shared-release.png -------------------------------------------------------------------------------- /src/assets/images/ecosystem_market.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/ecosystem_market.png -------------------------------------------------------------------------------- /src/assets/images/home_image_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/home_image_active.png -------------------------------------------------------------------------------- /src/assets/images/knowledge_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/knowledge_image.png -------------------------------------------------------------------------------- /src/assets/images/send_image_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/send_image_gray.png -------------------------------------------------------------------------------- /src/assets/images/theme/nav-style1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/theme/nav-style1.png -------------------------------------------------------------------------------- /src/assets/images/theme/nav-style2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/theme/nav-style2.png -------------------------------------------------------------------------------- /src/assets/images/workspace_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/workspace_image.png -------------------------------------------------------------------------------- /src/assets/ecosystem/shared-reviewing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/ecosystem/shared-reviewing.png -------------------------------------------------------------------------------- /src/assets/images/agent_conversation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/agent_conversation.png -------------------------------------------------------------------------------- /src/assets/images/square_banner_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/square_banner_image.png -------------------------------------------------------------------------------- /src/assets/images/square_image_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/square_image_active.png -------------------------------------------------------------------------------- /src/assets/images/system_image_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/system_image_active.png -------------------------------------------------------------------------------- /src/assets/images/square_banner_image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/square_banner_image2.png -------------------------------------------------------------------------------- /src/assets/images/teach_material_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/teach_material_active.png -------------------------------------------------------------------------------- /src/assets/images/theme/dark-navbar-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/theme/dark-navbar-bg.png -------------------------------------------------------------------------------- /src/assets/images/theme/light-navbar-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/theme/light-navbar-bg.png -------------------------------------------------------------------------------- /src/assets/images/workspace_image_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/workspace_image_active.png -------------------------------------------------------------------------------- /src/components/CreatedItem/index.less: -------------------------------------------------------------------------------- 1 | .upload-box { 2 | margin: 16px 0; 3 | } 4 | 5 | .create-team-form { 6 | width: 100%; 7 | } 8 | -------------------------------------------------------------------------------- /src/pages/SpaceLibrary/ComponentItem/index.less: -------------------------------------------------------------------------------- 1 | .time { 2 | line-height: 16px; 3 | } 4 | 5 | .status { 6 | height: 16px; 7 | } 8 | -------------------------------------------------------------------------------- /src/types/enums/teamSetting.ts: -------------------------------------------------------------------------------- 1 | export enum TeamStatusEnum { 2 | Owner = 'Owner', 3 | Admin = 'Admin', 4 | User = 'User', 5 | } 6 | -------------------------------------------------------------------------------- /src/assets/images/ecosystem_market_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuwax-ai/nuwax/HEAD/src/assets/images/ecosystem_market_active.png -------------------------------------------------------------------------------- /src/components/business-component/CopyToSpaceComponent/index.less: -------------------------------------------------------------------------------- 1 | // CopyToSpaceComponent 样式文件 2 | // 该组件使用 MoveCopyComponent 的样式,此处预留扩展样式 3 | -------------------------------------------------------------------------------- /src/pages/AppDev/components/ChatArea/components/AppDevMarkdownCMDWrapper/index.less: -------------------------------------------------------------------------------- 1 | .chatAreaMarkdown { 2 | // 继承父组件的样式 3 | width: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /src/types/enums/ecosystemMarket.ts: -------------------------------------------------------------------------------- 1 | export enum EcosystemMarketEnum { 2 | Plugin = 'Plugin', 3 | Template = 'Template', 4 | MCP = 'MCP', 5 | } 6 | -------------------------------------------------------------------------------- /src/components/LabelStar/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | gap: 4px; 5 | 6 | .star { 7 | color: @RED; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/pages/SpaceDevelop/ApplicationItem/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token.less'; 2 | 3 | .footer { 4 | height: 24px; 5 | color: #828894; 6 | font-size: 16px; 7 | } 8 | -------------------------------------------------------------------------------- /src/components/custom/TooltipIcon/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .box { 4 | width: 26px; 5 | height: 26px; 6 | font-size: 14px; 7 | color: @GRAY32; 8 | } 9 | -------------------------------------------------------------------------------- /src/pages/AppDev/components/DataResourceList/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color.less'; 2 | @import '@/styles/token.less'; 3 | 4 | .dataResourceItem { 5 | cursor: pointer; 6 | } 7 | -------------------------------------------------------------------------------- /config/config.production.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'umi'; 2 | 3 | export default defineConfig({ 4 | define: { 5 | 'process.env.BASE_URL': '', 6 | }, 7 | hash: true, 8 | }); 9 | -------------------------------------------------------------------------------- /src/constants/version.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 应用版本信息 3 | * 此文件由 scripts/generate-version.js 自动生成,请勿手动修改 4 | */ 5 | export const APP_VERSION = '1.0.5'; 6 | export const APP_NAME = 'nuwax-frontend'; 7 | -------------------------------------------------------------------------------- /src/pages/SpaceKnowledge/QaBatchModal/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .dragger { 4 | margin-top: 16px; 5 | border: 1px dashed @WHITE11; 6 | border-radius: 6px; 7 | } 8 | -------------------------------------------------------------------------------- /src/components/McpCollapseComponentList/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token'; 2 | 3 | .text { 4 | color: @colorTextTertiary; 5 | font-size: @fontSizeSm; 6 | line-height: @lineHeight; 7 | } 8 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/KnowledgeTextList/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .knowledge-extra { 4 | padding: 0 6px; 5 | font-size: 12px; 6 | color: @GRAY05; 7 | } 8 | -------------------------------------------------------------------------------- /src/types/enums/event.ts: -------------------------------------------------------------------------------- 1 | export enum EventTypeEnum { 2 | // 有新的通知消息 3 | NewNotifyMessage = 'new_notify_message', 4 | // 会话消息列表需要刷新 5 | RefreshChatMessage = 'refresh_chat_message', 6 | } 7 | -------------------------------------------------------------------------------- /src/components/base/EcoShareStatus/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token.less'; 2 | 3 | .container { 4 | color: @colorText; 5 | font-size: @fontSize; 6 | font-weight: @fontWeightStrong; 7 | } 8 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/LongMemoryContent/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | //color: @BLANK13; 5 | //font-size: 14px; 6 | //line-height: 16px; 7 | } 8 | -------------------------------------------------------------------------------- /src/components/custom/Loading/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | gap: @marginXs; 6 | color: @colorPrimary; 7 | font-size: @fontSizeSm; 8 | } 9 | -------------------------------------------------------------------------------- /src/components/CreateWorkflow/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | border-radius: 10px; 5 | background: @WHITE12; 6 | } 7 | 8 | .header { 9 | background: @WHITE12; 10 | } 11 | -------------------------------------------------------------------------------- /config/config.development.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'umi'; 2 | 3 | export default defineConfig({ 4 | define: { 5 | 'process.env.BASE_URL': 'https://testagent.xspaceagi.com', 6 | }, 7 | hash: true, 8 | }); 9 | -------------------------------------------------------------------------------- /src/utils/monaco-python.js: -------------------------------------------------------------------------------- 1 | // 注册Python语言支持 2 | monaco.languages.register({ id: 'python' }); 3 | monaco.languages.setMonarchTokensProvider('python', { 4 | keywords: [], 5 | tokenizer: { 6 | root: [], 7 | }, 8 | }); 9 | -------------------------------------------------------------------------------- /src/pages/SpaceKnowledge/LocalCustomDocModal/UploadFile/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | height: 386px; 5 | margin-top: 16px; 6 | border: 1px dashed @WHITE11; 7 | border-radius: 6px; 8 | } 9 | -------------------------------------------------------------------------------- /src/components/FormListItem/Reference.tsx: -------------------------------------------------------------------------------- 1 | import { Select } from 'antd'; 2 | 3 | const Reference = () => { 4 | return ( 5 |
6 | 7 |
8 | ); 9 | }; 10 | 11 | export default Reference; 12 | -------------------------------------------------------------------------------- /src/components/AgentChatEmpty/index.less: -------------------------------------------------------------------------------- 1 | .avatar { 2 | width: 60px; 3 | height: 60px; 4 | margin-bottom: 14px; 5 | border-radius: 10px; 6 | } 7 | 8 | .nickname { 9 | line-height: 30px; 10 | padding: 0 30px; 11 | text-align: center; 12 | } 13 | -------------------------------------------------------------------------------- /src/components/PluginConfigTitle/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .title { 5 | font-size: 18px; 6 | font-weight: @fontWeightStrong; 7 | color: @BLANK04; 8 | } 9 | 10 | .extra { 11 | gap: 20px; 12 | } 13 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/SpaceSection/SpaceTitle/CreateNewTeam/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .create-team-tips { 4 | color: @BLANK07; 5 | font-size: 14px; 6 | line-height: 22px; 7 | } 8 | 9 | .upload-box { 10 | margin: 16px 0; 11 | } 12 | -------------------------------------------------------------------------------- /src/pages/AppDev/components/ToggleDesignBtn/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token.less'; 2 | 3 | // 聊天模式容器 4 | .chatModeContainer { 5 | display: flex; 6 | align-items: center; 7 | padding: 8px 20px; 8 | border-bottom: 1px solid rgba(0, 0, 0, 10%); 9 | } 10 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/User/UserAction/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token'; 2 | 3 | .row { 4 | height: 36px; 5 | padding: @paddingSm; 6 | gap: @paddingSm; 7 | color: @colorTextSecondary; 8 | 9 | span { 10 | font-size: @fontSize; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/KnowledgeTextList/KnowledgeSetting/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token'; 2 | 3 | .container { 4 | padding-top: 30px; 5 | 6 | .title { 7 | font-weight: @fontWeightStrong; 8 | margin-bottom: 20px; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/access.ts: -------------------------------------------------------------------------------- 1 | export default (initialState: API.UserInfo) => { 2 | // 在这里按照初始化数据定义项目中的权限,统一管理 3 | // 参考文档 https://umijs.org/docs/max/access 4 | const canSeeAdmin = initialState && initialState.name !== 'dontHaveAccess'; 5 | return { 6 | canSeeAdmin, 7 | }; 8 | }; 9 | -------------------------------------------------------------------------------- /src/models/global.ts: -------------------------------------------------------------------------------- 1 | // 全局共享数据示例 2 | import { useState } from 'react'; 3 | 4 | const useUser = () => { 5 | const [name, setName] = useState('DEFAULT_NAME'); 6 | return { 7 | name, 8 | setName, 9 | }; 10 | }; 11 | 12 | export default useUser; 13 | -------------------------------------------------------------------------------- /src/components/base/McpStatus/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token.less'; 2 | 3 | .container { 4 | height: 16px; 5 | gap: 4px; 6 | color: #828894; 7 | font-size: @fontSizeSm; 8 | font-weight: normal; 9 | 10 | .title { 11 | line-height: 16px; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/pages/SpaceTable/TableOperationBar/index.less: -------------------------------------------------------------------------------- 1 | .tab-container { 2 | margin-left: 14px; 3 | user-select: none; // 禁止选中tab; 4 | 5 | :global { 6 | .ant-tabs-tab.ant-tabs-tab-focus .ant-tabs-tab-btn { 7 | outline: none !important; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/constants/event.constants.tsx: -------------------------------------------------------------------------------- 1 | import { EventTypeEnum } from '@/types/enums/event'; 2 | 3 | export const EVENT_TYPE: Record = { 4 | NewNotifyMessage: EventTypeEnum.NewNotifyMessage, // 新消息 5 | RefreshChatMessage: EventTypeEnum.RefreshChatMessage, // 刷新会话 6 | }; 7 | -------------------------------------------------------------------------------- /src/components/OverrideTextArea/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .text-area { 4 | margin-bottom: 0; 5 | 6 | .input { 7 | padding-bottom: 20px; 8 | } 9 | } 10 | 11 | .text { 12 | right: 12px; 13 | bottom: 0; 14 | margin-bottom: 0; 15 | color: @BLANK10; 16 | } 17 | -------------------------------------------------------------------------------- /src/assets/icons/chat/stop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | # 优先使用 pnpm;若未安装则回退到 npx/yarn/bun 2 | if command -v pnpm >/dev/null 2>&1; then 3 | pnpm run lint-staged 4 | elif command -v bun >/dev/null 2>&1; then 5 | bun x lint-staged 6 | elif command -v yarn >/dev/null 2>&1; then 7 | yarn lint-staged 8 | else 9 | npx --yes lint-staged 10 | fi 11 | -------------------------------------------------------------------------------- /src/components/business-component/index.ts: -------------------------------------------------------------------------------- 1 | export { default as AppDevEmptyState } from './AppDevEmptyState'; 2 | export { default as CardWrapper } from './CardWrapper'; 3 | export { default as CopyToSpaceComponent } from './CopyToSpaceComponent'; 4 | export { default as PagePreviewIframe } from './PagePreviewIframe'; 5 | -------------------------------------------------------------------------------- /src/pages/SystemConfig/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token'; 2 | 3 | .container { 4 | width: 100%; 5 | height: 100%; 6 | padding: 16px 24px; 7 | // background-color: #f3f5fa; 8 | } 9 | 10 | .title { 11 | font-weight: @fontWeightStrong; 12 | font-size: 18px; 13 | margin-bottom: 13px; 14 | } 15 | -------------------------------------------------------------------------------- /src/components/ParamsNameLabel/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | gap: 6px; 5 | 6 | .star { 7 | color: @RED; 8 | } 9 | 10 | .param-type { 11 | color: @BLUE06; 12 | padding: 0 4px; 13 | border-radius: 4px; 14 | background-color: @BLANK20; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/ConfigOptionsHeader/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: @paddingXs; 6 | 7 | .title { 8 | font-size: @fontSize; 9 | line-height: @lineHeight; 10 | color: @colorTextSecondary; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/components/SubmitButton/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .btn { 4 | width: 100px; 5 | } 6 | 7 | .confirm-btn[disabled] { 8 | background-color: @GRAY03; /* 修改背景颜色 */ 9 | color: @WHITE; /* 修改文本颜色 */ 10 | border-color: transparent; /* 修改边框颜色 */ 11 | cursor: not-allowed; /* 修改鼠标指针样式 */ 12 | } 13 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/SpaceSection/DevCollect/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .no-dev-collect { 5 | padding: 0 @paddingXs; 6 | font-size: @fontSizeSm; 7 | line-height: @fontHeight; 8 | color: @navSecondMenuTextSecondary; 9 | opacity: 0.5; // TODO 这个需要给UI确认 10 | } 11 | -------------------------------------------------------------------------------- /src/pages/SpaceTable/AddAndModify/index.less: -------------------------------------------------------------------------------- 1 | .add-modify-form { 2 | max-height: 60vh; 3 | overflow: auto; 4 | 5 | .ant-picker { 6 | width: 100%; 7 | } 8 | 9 | .ant-input-number { 10 | width: 100%; 11 | } 12 | } 13 | 14 | .add-modal-style { 15 | max-height: 75%; 16 | overflow: hidden; 17 | } 18 | -------------------------------------------------------------------------------- /src/assets/icons/design/border_width.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | -------------------------------------------------------------------------------- /src/components/SiteFooter/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .footer { 4 | padding: 10px 0 20px; 5 | width: 100%; 6 | text-align: center; 7 | font-size: 12px; 8 | font-weight: normal; 9 | color: @GRAY07; 10 | //background-color: @WHITE06; 11 | 12 | a { 13 | color: @GRAY07; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/pages/404/index.tsx: -------------------------------------------------------------------------------- 1 | import classNames from 'classnames'; 2 | import React from 'react'; 3 | import styles from './index.less'; 4 | 5 | const cx = classNames.bind(styles); 6 | 7 | const Index: React.FC = () => { 8 | return
404页面
; 9 | }; 10 | 11 | export default Index; 12 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/EventList/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | flex-wrap: wrap; 5 | gap: 6px; 6 | 7 | .box { 8 | display: inline-block; 9 | padding: 2px 10px; 10 | color: @GRAY12; 11 | font-size: 12px; 12 | background-color: @GRAY01; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/VariableList/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | flex-wrap: wrap; 5 | gap: 6px; 6 | 7 | .box { 8 | display: inline-block; 9 | padding: 2px 10px; 10 | color: @GRAY12; 11 | font-size: 12px; 12 | background-color: @GRAY01; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/pages/SpaceTable/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .database-container { 4 | padding: 0 20px; 5 | height: 100%; 6 | display: flex; 7 | flex-direction: column; 8 | 9 | .inner-container { 10 | flex: 1; 11 | margin-top: 8px; 12 | display: flex; 13 | flex-direction: column; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/pages/Chat/DropdownChangeName/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .dropdown-container { 5 | padding: @paddingXxs @paddingXs; 6 | border-radius: @borderRadius; 7 | cursor: pointer; 8 | color: @colorTextSecondary; 9 | 10 | &:hover { 11 | background-color: #f3f3f3; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/ComponentSettingModal/CardBind/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | background-color: @WHITE04; 6 | } 7 | 8 | .title { 9 | margin-bottom: 12px; 10 | font-size: 18px; 11 | font-weight: @fontWeightStrong; 12 | color: @BLANK17; 13 | } 14 | -------------------------------------------------------------------------------- /src/pages/SpaceKnowledge/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | overflow: hidden; 5 | 6 | .inner-container { 7 | border: 1px solid @GRAY01; 8 | } 9 | 10 | .inputSearch { 11 | display: flex; 12 | justify-content: flex-end; 13 | align-items: center; 14 | height: 50px; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | # 优先使用 pnpm;若未安装则回退到 npx/yarn/bun 2 | if command -v pnpm >/dev/null 2>&1; then 3 | pnpm run verify-commit "$1" 4 | elif command -v bun >/dev/null 2>&1; then 5 | bun x max verify-commit "$1" 6 | elif command -v yarn >/dev/null 2>&1; then 7 | yarn verify-commit "$1" 8 | else 9 | npx --yes max verify-commit "$1" 10 | fi 11 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "singleQuote": true, 4 | "trailingComma": "all", 5 | "proseWrap": "never", 6 | "overrides": [{ "files": ".prettierrc", "options": { "parser": "json" } }], 7 | "plugins": [ 8 | "prettier-plugin-organize-imports", 9 | "prettier-plugin-packagejson" 10 | ], 11 | "endOfLine": "auto" 12 | } 13 | -------------------------------------------------------------------------------- /src/components/AgentSidebar/StatisticsInfo/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .header { 5 | color: @colorText; 6 | justify-content: flex-end; 7 | //padding: @paddingXxs @paddingSm; 8 | 9 | // .close { 10 | // height: 20px; 11 | // width: 20px; 12 | // border: none; 13 | // } 14 | } 15 | -------------------------------------------------------------------------------- /src/components/EcosystemCard/SharedIcon/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token'; 2 | 3 | .container { 4 | display: flex; 5 | align-items: center; 6 | gap: 4px; 7 | color: rgba(21, 23, 31, 50%); 8 | font-size: 12px; 9 | font-weight: @fontWeightStrong; 10 | flex: 0 1 auto; 11 | 12 | .text { 13 | white-space: nowrap; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/types/background.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 背景图片类型定义 3 | * 避免循环依赖,独立定义类型 4 | */ 5 | export interface BackgroundImage { 6 | /** 背景图片唯一标识 */ 7 | id: string; 8 | /** 背景图片显示名称 */ 9 | name: string; 10 | /** 背景图片文件路径 */ 11 | path: string; 12 | /** 背景图片预览路径 */ 13 | preview: string; 14 | /** 背景图片描述(可选) */ 15 | description?: string; 16 | } 17 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/SquareSection/index.less: -------------------------------------------------------------------------------- 1 | .box-hidden { 2 | height: 0; 3 | overflow: hidden; 4 | transition: all 0.3s; 5 | transition-duration: 0.15s; 6 | transition-property: all; 7 | transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 8 | 9 | &.visible { 10 | height: auto; 11 | padding-bottom: 16px; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/models/monaco.ts: -------------------------------------------------------------------------------- 1 | // 代码编辑器的使用 2 | import { useState } from 'react'; 3 | 4 | const useUser = () => { 5 | const [code, setCode] = useState(''); 6 | const [isShow, setIsShow] = useState(false); 7 | return { 8 | code, 9 | setCode, 10 | isShow, 11 | setIsShow, 12 | }; 13 | }; 14 | 15 | export default useUser; 16 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/PageSettingModal/HomeIndex/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | height: 100%; 6 | padding: 50px 24px 24px; 7 | padding-left: 20px; 8 | background-color: @WHITE; 9 | overflow: hidden; 10 | 11 | .footer { 12 | text-align: right; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/assets/icons/chat/send.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/PageSettingModal/VisibleToLLM/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | height: 100%; 6 | padding: 50px 24px 24px; 7 | padding-left: 20px; 8 | background-color: @WHITE; 9 | overflow: hidden; 10 | 11 | .footer { 12 | text-align: right; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/pages/SpaceDevelop/ApplicationItem/CollectStar/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .icon-box { 4 | width: 20px; 5 | height: 20px; 6 | margin-inline-start: 6px; 7 | border-radius: 6px; 8 | background-color: @BLANK18; 9 | color: @BLANK05; 10 | cursor: pointer; 11 | 12 | &.collected { 13 | color: @YELLOW01; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/components/base/SvgIcon/styles.less: -------------------------------------------------------------------------------- 1 | // .xagi-svg-icon { 2 | // /* 让 color 透传至 path 的 stroke/fill,要求源 SVG 使用 currentColor */ 3 | // color: inherit; 4 | // // vertical-align: -0.125em; 5 | // } 6 | 7 | /* 使用文件导入的 SVG 往往包含 stroke/fill 的展示属性,这里统一覆盖为 currentColor */ 8 | .xagi-svg-icon path { 9 | // stroke: currentColor; 10 | fill: currentcolor; 11 | } 12 | -------------------------------------------------------------------------------- /src/components/custom/SelectList/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | width: 120px; 5 | 6 | .option-icon-box { 7 | width: 20px; 8 | height: 20px; 9 | 10 | .icon { 11 | color: @BLUE03; 12 | } 13 | } 14 | 15 | .image { 16 | width: 18px; 17 | height: 18px; 18 | object-fit: cover; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/EcosystemMarketSection/index.less: -------------------------------------------------------------------------------- 1 | .box-hidden { 2 | height: 0; 3 | overflow: hidden; 4 | transition: all 0.3s; 5 | transition-duration: 0.15s; 6 | transition-property: all; 7 | transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 8 | 9 | &.visible { 10 | height: auto; 11 | padding-bottom: 16px; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/assets/icons/design/radius.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | -------------------------------------------------------------------------------- /src/components/ChatView/ChatSampleBottom/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | color: @colorTextDescription; 6 | font-size: @fontSizeSm; 7 | padding: 0 @paddingXs; 8 | 9 | .more-action { 10 | gap: 10px; 11 | 12 | img { 13 | width: 16px; 14 | height: 16px; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/components/CreateKnowledge/SkillListEmpty/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .workflow-desc { 5 | width: 100%; 6 | height: 56px; 7 | color: #999; 8 | background-color: #f5f5f5; 9 | border-radius: 5px; 10 | display: flex; 11 | align-items: center; 12 | justify-content: center; 13 | cursor: pointer; 14 | } 15 | -------------------------------------------------------------------------------- /src/pages/Square/SquareComponentInfo/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .time { 4 | line-height: 16px; 5 | } 6 | 7 | .footer { 8 | height: 24px; 9 | gap: 16px; 10 | 11 | .text { 12 | display: flex; 13 | align-items: center; 14 | margin-right: auto; 15 | font-size: 12px; 16 | color: #828894; 17 | gap: 4px; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/components/ExpandTextArea/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | .prompt-editor-provider { 6 | border: 0.5px solid @colorBorderSecondary; 7 | border-radius: @borderRadius; 8 | height: 100px; 9 | 10 | &:hover, 11 | &:focus { 12 | border-color: @colorPrimary; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/SpaceSection/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | .collection-title { 6 | margin-top: @margin; 7 | padding: @paddingXs; 8 | line-height: @fontHeightSm; 9 | font-size: @fontSize; 10 | font-weight: @fontWeightStrong; 11 | color: @navSecondMenuTextSecondary; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/pages/AppDev/components/index.ts: -------------------------------------------------------------------------------- 1 | // 导出 AppDev 相关组件 2 | export { default as AppDevHeader } from './AppDevHeader'; 3 | export { default as CodeViewer } from './CodeViewer'; 4 | export { default as ContentViewer } from './ContentViewer'; 5 | export { default as FilePathHeader } from './FilePathHeader'; 6 | export { default as ImageViewer } from './ImageViewer'; 7 | // WebIDE 组件直接通过各自的目录导出 8 | -------------------------------------------------------------------------------- /src/components/NoMoreDivider/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token'; 2 | 3 | .no-more-divider { 4 | width: 172px; 5 | margin: 0 auto; 6 | font-size: 12px; 7 | font-style: normal; 8 | font-weight: @fontWeightStrong; 9 | line-height: 16px; /* 133.333% */ 10 | 11 | .divider { 12 | color: @colorTextQuaternary; 13 | border-color: @colorTextQuaternary; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/locales/en-US.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Global English messages 3 | * For React Intl / Umi locale plugin 4 | */ 5 | export default { 6 | // Theme 7 | 'theme.light': 'Light', 8 | 'theme.dark': 'Dark', 9 | 'theme.background': 'Background', 10 | 'theme.background.select': 'Select Background', 11 | 12 | // Language 13 | 'lang.en': 'English', 14 | 'lang.zh': 'Chinese', 15 | }; 16 | -------------------------------------------------------------------------------- /src/pages/SpaceKnowledge/DocWrap/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | width: 320px; 5 | padding: 0 10px 16px; 6 | border-right: 1px solid @GRAY01; 7 | 8 | .search-icon { 9 | color: @GRAY05; 10 | } 11 | 12 | .document-title { 13 | line-height: 40px; 14 | padding: 0 10px; 15 | color: @GRAY05; 16 | font-size: 14px; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.lintstagedrc: -------------------------------------------------------------------------------- 1 | { 2 | "*.{md,json}": ["prettier --cache --write"], 3 | "*.{js,jsx}": ["max lint --fix --eslint-only", "prettier --cache --write"], 4 | "*.{css,less}": [ 5 | "max lint --fix --stylelint-only", 6 | "prettier --cache --write" 7 | ], 8 | "*.ts?(x)": [ 9 | "max lint --fix --eslint-only", 10 | "prettier --cache --parser=typescript --write" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /src/locales/zh-CN.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 全局中文(简体)文案 3 | * 用于 React Intl / Umi 插件的多语言配置 4 | * 5 | * 包含: 6 | * - 主题切换文案 7 | * - 语言切换文案 8 | * - 背景选择文案 9 | */ 10 | export default { 11 | // 主题相关 12 | 'theme.light': '浅色', 13 | 'theme.dark': '深色', 14 | 'theme.background': '背景', 15 | 'theme.background.select': '选择背景', 16 | 17 | // 语言切换相关 18 | 'lang.en': '英文', 19 | 'lang.zh': '中文', 20 | }; 21 | -------------------------------------------------------------------------------- /src/assets/icons/chat/add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentModelSetting/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token'; 2 | 3 | .modal-wrapper { 4 | width: 586px; 5 | } 6 | 7 | .select { 8 | width: 259px !important; 9 | margin-bottom: 16px; 10 | } 11 | 12 | .title { 13 | font-size: 14px; 14 | font-weight: @fontWeightStrong; 15 | margin-bottom: 16px; 16 | } 17 | 18 | .generate-name { 19 | font-weight: @fontWeightStrong; 20 | } 21 | -------------------------------------------------------------------------------- /src/assets/icons/common/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/AgentSidebar/AgentConversation/HistoryConversation/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | height: 500px; 5 | } 6 | 7 | .row { 8 | height: 28px; 9 | margin-bottom: 10px; 10 | padding: 0 20px 0 10px; 11 | gap: 20px; 12 | color: @BLANK04; 13 | font-size: 12px; 14 | background-color: @WHITE03; 15 | 16 | span { 17 | color: @GRAY07; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/components/base/AgentType/images/icon_table.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/types/enums/login.ts: -------------------------------------------------------------------------------- 1 | export enum LoginTypeEnum { 2 | // 密码登录 3 | Password, 4 | // 手机验证码登录、注册 5 | Code, 6 | } 7 | 8 | export enum LoginMethodEnum { 9 | // 手机号码登录 10 | Phone, 11 | // 邮箱登录 12 | Email, 13 | } 14 | 15 | // 发送验证码枚举 16 | export enum SendCodeEnum { 17 | LOGIN_OR_REGISTER = 'LOGIN_OR_REGISTER', 18 | RESET_PASSWORD = 'RESET_PASSWORD', 19 | BIND_EMAIL = 'BIND_EMAIL', 20 | } 21 | -------------------------------------------------------------------------------- /k8s/config/frontend-service.yaml: -------------------------------------------------------------------------------- 1 | # frontend-service.yaml 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: agent-frontend-service 6 | spec: 7 | type: ClusterIP 8 | selector: 9 | app: agent-frontend 10 | ports: 11 | - name: http 12 | protocol: TCP 13 | port: 80 14 | targetPort: 80 15 | - name: https 16 | protocol: TCP 17 | port: 443 18 | targetPort: 443 -------------------------------------------------------------------------------- /src/components/custom/CustomInputNumber/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .space-box { 4 | gap: 8px; 5 | 6 | .input-number-arrow { 7 | width: 12px; 8 | height: 30px; 9 | background: @WHITE; 10 | border-radius: 6px; 11 | font-size: 12px; 12 | color: @GRAY05; 13 | 14 | .input-disabled { 15 | color: @GRAY04; 16 | cursor: not-allowed; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/components/editableTitle/index.less: -------------------------------------------------------------------------------- 1 | .clickableElement { 2 | cursor: pointer; 3 | line-height: 24px; 4 | height: 24px; 5 | display: inline-block; 6 | overflow: hidden; 7 | text-overflow: ellipsis; 8 | white-space: nowrap; 9 | vertical-align: middle; 10 | width: 100%; 11 | } 12 | 13 | .editableTitleInput { 14 | font-size: 12px; 15 | height: 24px; 16 | 17 | // background-color: red; 18 | } 19 | -------------------------------------------------------------------------------- /src/components/PluginCardList/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .listTitle { 5 | margin-bottom: 16px !important; 6 | font-weight: @fontWeightStrong !important; 7 | color: @GRAY03; 8 | } 9 | 10 | .cardCol { 11 | margin-bottom: 16px; 12 | } 13 | 14 | .emptyContainer { 15 | margin: 32px 0; 16 | padding: 24px; 17 | background-color: @GRAY09; 18 | border-radius: 8px; 19 | } 20 | -------------------------------------------------------------------------------- /src/pages/SystemConfig/BaseTab/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color.less'; 2 | @import '@/styles/token.less'; 3 | 4 | .container { 5 | position: relative; 6 | padding: 26px 26px 0 22px; 7 | 8 | .footer { 9 | position: sticky; 10 | bottom: 0; 11 | left: 0; 12 | width: 100%; 13 | line-height: 80px; 14 | background-color: @colorBgContainer; 15 | border-top: 1px solid @colorBorder; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/assets/icons/nav/sidebar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/pages/SpaceLibrary/CreateModel/IntranetModel/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .internal-network { 4 | padding: 12px 10px; 5 | border-radius: 5px; 6 | background: @WHITE15; 7 | 8 | p { 9 | margin-bottom: 8px; 10 | font-size: 12px; 11 | line-height: 22px; 12 | color: @BLANK04; 13 | } 14 | 15 | .state { 16 | margin-left: 20px; 17 | font-size: 14px; 18 | color: @BLANK17; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/types/interfaces/markdownRender.ts: -------------------------------------------------------------------------------- 1 | import type { MarkdownCMDRef } from 'ds-markdown'; 2 | 3 | export type { MarkdownCMDRef }; 4 | 5 | // 组件 Props 类型 6 | export interface MarkdownRendererProps { 7 | id: string; 8 | className?: string; 9 | disableTyping?: boolean; 10 | theme?: 'light' | 'dark'; 11 | answerType?: 'answer' | 'thinking'; 12 | markdownRef: React.RefObject; 13 | headerActions?: boolean; 14 | } 15 | -------------------------------------------------------------------------------- /src/components/base/HoverScrollbar/index.less: -------------------------------------------------------------------------------- 1 | .container { 2 | position: relative; 3 | width: 100%; 4 | height: 100%; 5 | } 6 | 7 | /* 外层滚动容器:启用原生稳定滚动条槽位,避免内容宽度变化 */ 8 | .content { 9 | position: relative; 10 | width: 100%; 11 | height: 100%; 12 | overflow-x: hidden; 13 | overflow-y: hidden; 14 | 15 | &:hover { 16 | overflow: auto; 17 | } 18 | } 19 | 20 | /* 内部内容:绝对定位 */ 21 | .body { 22 | position: absolute; 23 | } 24 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/User/UserAvatar/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .user { 5 | width: 32px; 6 | height: 32px; 7 | margin-top: 5px; 8 | margin-bottom: 5px; 9 | border-radius: 50%; 10 | overflow: hidden; 11 | box-sizing: content-box; 12 | border: @lineWidth solid @colorBorder; 13 | 14 | img { 15 | width: 100%; 16 | height: 100%; 17 | object-fit: cover; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/layouts/Setting/SettingEmail/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 24px; 6 | 7 | h3 { 8 | margin-bottom: 30px; 9 | font-size: 22px; 10 | font-weight: @fontWeightStrong; 11 | color: @BLANK04; 12 | } 13 | 14 | .form { 15 | width: 260px; 16 | } 17 | 18 | .input { 19 | width: 140px; 20 | } 21 | 22 | .btn { 23 | width: 100px; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/layouts/Setting/ResetPassword/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 24px; 6 | 7 | h3 { 8 | margin-bottom: 30px; 9 | font-size: 22px; 10 | font-weight: @fontWeightStrong; 11 | color: @BLANK04; 12 | } 13 | 14 | .form { 15 | width: 260px; 16 | } 17 | 18 | .input { 19 | width: 140px; 20 | } 21 | 22 | .btn { 23 | width: 100px; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/EventBindModal/index.less: -------------------------------------------------------------------------------- 1 | .input-box { 2 | margin-top: 16px; 3 | font-size: 12px; 4 | cursor: pointer; 5 | } 6 | 7 | // Table 折叠动画 8 | .table-collapse-wrapper { 9 | max-height: 0; 10 | overflow: hidden; 11 | transition: max-height 0.3s ease-in-out; 12 | } 13 | 14 | .table-collapse-active { 15 | max-height: 600px; 16 | } 17 | 18 | .modal-body { 19 | max-height: 500px; 20 | overflow-y: auto; 21 | } 22 | -------------------------------------------------------------------------------- /src/components/CustomPopover/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .popover-box { 4 | :global { 5 | .ant-popover-inner { 6 | padding: 0; 7 | } 8 | } 9 | 10 | .popover-list { 11 | padding: 4px 6px; 12 | 13 | .p-box { 14 | padding: 4px 30px 4px 10px; 15 | font-size: 14px; 16 | color: @BLANK04; 17 | gap: 4px; 18 | 19 | &.del { 20 | color: @RED; 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/components/VersionHistory/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .main-wrap { 5 | padding: 0 10px; 6 | 7 | .title { 8 | line-height: 40px; 9 | padding-left: 8px; 10 | margin-top: 20px; 11 | font-size: 14px; 12 | font-weight: @fontWeightStrong; 13 | border-bottom: 1px solid @WHITE15; 14 | color: @BLANK04; 15 | } 16 | } 17 | 18 | .drawer-body { 19 | padding: 0 10px !important; 20 | } 21 | -------------------------------------------------------------------------------- /src/assets/icons/common/caret_up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/design/border_left.svg: -------------------------------------------------------------------------------- 1 | 8 | 17 | 24 | -------------------------------------------------------------------------------- /src/assets/icons/design/border_top.svg: -------------------------------------------------------------------------------- 1 | 8 | 17 | 24 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/ComponentSettingModal/CardBind/CardModeSetting/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .card-box { 4 | position: relative; 5 | min-height: 95px; 6 | margin-bottom: 16px; 7 | border: 1px solid @GRAY06; 8 | border-radius: 6px; 9 | background-color: @WHITE; 10 | 11 | img { 12 | width: 100%; 13 | } 14 | 15 | .radio { 16 | position: absolute; 17 | top: 6px; 18 | right: 6px; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/pages/SpaceLog/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | padding: 6px 22px; 5 | 6 | .search-area { 7 | padding: 26px 0 18px; 8 | 9 | .line { 10 | width: 1px; 11 | height: 88px; 12 | margin: 0 50px 0 70px; 13 | background-color: @GRAY06; 14 | } 15 | } 16 | 17 | .table-area { 18 | :global { 19 | .ant-table { 20 | border-radius: initial; 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/assets/icons/design/border_bottom.svg: -------------------------------------------------------------------------------- 1 | 8 | 17 | 24 | -------------------------------------------------------------------------------- /src/assets/icons/design/border_right.svg: -------------------------------------------------------------------------------- 1 | 8 | 17 | 24 | -------------------------------------------------------------------------------- /src/assets/icons/nav/backward.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/pages/EditAgent/DebugDetails/NodeDetails/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | display: grid; 5 | grid-template-columns: repeat(2, minmax(0, 1fr)); 6 | gap: 10px; 7 | } 8 | 9 | .box { 10 | height: 16px; 11 | color: @GRAY05; 12 | font-size: 12px; 13 | 14 | &.mt-10 { 15 | margin-top: 10px; 16 | } 17 | 18 | .label { 19 | display: inline-block; 20 | } 21 | 22 | .value { 23 | color: @BLANK03; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/pages/SpaceLog/LogDetails/NodeDetails/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | display: grid; 5 | grid-template-columns: repeat(2, minmax(0, 1fr)); 6 | gap: 10px; 7 | } 8 | 9 | .box { 10 | height: 16px; 11 | color: @GRAY05; 12 | font-size: 12px; 13 | 14 | &.mt-10 { 15 | margin-top: 10px; 16 | } 17 | 18 | .label { 19 | display: inline-block; 20 | } 21 | 22 | .value { 23 | color: @BLANK03; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/assets/icons/common/caret_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/common/caret_left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/common/caret_right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/pages/Login/SiteProtocol/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token'; 2 | @import '@/styles/color'; 3 | 4 | .span { 5 | color: @colorTextTertiary; 6 | } 7 | 8 | .a { 9 | color: @colorTextTertiary; 10 | font-weight: @fontWeightStrong; 11 | // 文本添加下划线 12 | text-decoration: underline; 13 | // 下划线距离文字顶部 14 | text-underline-offset: 3px; 15 | 16 | &:hover { 17 | color: @colorTextTertiary; 18 | // 文本添加下划线 19 | text-decoration: underline; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/utils/form.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export const customizeRequiredMark = ( 4 | label: React.ReactNode, 5 | { required }: { required: boolean }, 6 | ) => ( 7 | <> 8 | {label} 9 | {required ? ( 10 | 11 | * 12 | 13 | ) : null} 14 | 15 | ); 16 | 17 | export const customizeRequiredNoStarMark = (label: React.ReactNode) => ( 18 | <>{label} 19 | ); 20 | -------------------------------------------------------------------------------- /src/components/ConditionRender/index.tsx: -------------------------------------------------------------------------------- 1 | import type { ConditionRenderProps } from '@/types/interfaces/common'; 2 | import type { PropsWithChildren } from 'react'; 3 | import React from 'react'; 4 | 5 | /** 6 | * 条件渲染组件 7 | */ 8 | const ConditionRender: React.FC> = ({ 9 | children, 10 | condition, 11 | }) => { 12 | if (!!condition) { 13 | return <>{children}; 14 | } 15 | return null; 16 | }; 17 | 18 | export default ConditionRender; 19 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/SpaceSection/SpaceTitle/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .header { 5 | gap: @marginXs; 6 | color: @navSecondMenuText; 7 | 8 | .icon-down { 9 | color: @navSecondMenuTextSecondary; 10 | font-size: @fontSize; 11 | } 12 | 13 | :global { 14 | .ant-typography { 15 | color: @navSecondMenuText; 16 | } 17 | 18 | .anticon { 19 | color: @navSecondMenuTextSecondary; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/pages/SpacePageDevelop/ReverseProxyModal/ReverseProxyContentConfig/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | width: 100%; 6 | height: 100%; 7 | padding-top: 50px; 8 | background-color: @WHITE; 9 | 10 | :global { 11 | .ant-table-wrapper .ant-table-tbody-virtual .ant-table-cell { 12 | border-bottom: none; 13 | } 14 | 15 | .ant-table-footer { 16 | background-color: transparent; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/assets/icons/common/more.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/base/CopyButton/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .copy-btn { 5 | color: @colorTextDescription; 6 | font-size: @fontSizeSm; 7 | transition: color 0.2s ease-in-out; 8 | user-select: none; 9 | 10 | &:hover:not(.disabled) { 11 | color: @colorText; 12 | } 13 | 14 | &.disabled { 15 | color: @colorTextDisabled; 16 | cursor: not-allowed; 17 | } 18 | } 19 | 20 | // 图标样式 21 | .copy-image { 22 | margin-right: @marginXxs; 23 | } 24 | -------------------------------------------------------------------------------- /k8s/config/ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: agent-frontend-ingress 5 | annotations: 6 | nginx.ingress.kubernetes.io/ssl-redirect: "false" 7 | spec: 8 | ingressClassName: "nginx" 9 | rules: 10 | - host: agent-front.space.com 11 | http: 12 | paths: 13 | - path: / 14 | pathType: Prefix 15 | backend: 16 | service: 17 | name: agent-frontend-service 18 | port: 19 | number: 80 -------------------------------------------------------------------------------- /src/assets/svg/plus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/plus_icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/base/AuthorInfo/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token.less'; 2 | 3 | .container { 4 | min-width: 30px; 5 | gap: 4px; 6 | color: #828894; 7 | font-size: 12px; 8 | font-weight: @fontWeightStrong; 9 | flex: 0 1 auto; /* 等价于 flex-grow:0; flex-shrink:1; flex-basis:auto; */ 10 | 11 | .name { 12 | height: 16px; 13 | line-height: 16px; 14 | } 15 | 16 | .avatar { 17 | width: 16px; 18 | height: 16px; 19 | border-radius: 50%; 20 | object-fit: cover; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/pages/SpaceKnowledge/LocalCustomDocModal/DataProcess/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | margin-top: 20px; 5 | 6 | &:first-child { 7 | margin-top: 50px; 8 | } 9 | 10 | .box { 11 | gap: 10px; 12 | padding: 8px 20px; 13 | background-color: @WHITE; 14 | 15 | img { 16 | width: 40px; 17 | height: 40px; 18 | } 19 | 20 | h3 { 21 | font-size: 14px; 22 | } 23 | 24 | .desc { 25 | color: @GRAY05; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/assets/icons/design/margin_top.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/types/enums/theme.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 主题相关枚举定义 3 | */ 4 | 5 | /** 6 | * 布局深浅色风格类型 7 | * 注意:这与 Ant Design 的 theme 无关,仅用于布局风格 8 | */ 9 | export enum ThemeLayoutColorStyle { 10 | /** 浅色布局风格 */ 11 | LIGHT = 'light', 12 | /** 深色布局风格 */ 13 | DARK = 'dark', 14 | } 15 | 16 | /** 17 | * 导航风格类型 18 | * style1: 紧凑模式(无文字导航,有外边距和圆角) 19 | * style2: 展开模式(有文字导航,无外边距和圆角) 20 | */ 21 | export enum ThemeNavigationStyleType { 22 | /** 紧凑模式 */ 23 | STYLE1 = 'style1', 24 | /** 展开模式 */ 25 | STYLE2 = 'style2', 26 | } 27 | -------------------------------------------------------------------------------- /src/assets/icons/design/margin_bottom.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/icons/design/margin_right.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/types/enums/square.ts: -------------------------------------------------------------------------------- 1 | // 目标对象(智能体、工作流、插件)ID,可用值:Agent,Plugin,Workflow,KNOWLEDGE 2 | export enum SquareAgentTypeEnum { 3 | Agent = 'Agent', 4 | Plugin = 'Plugin', 5 | Workflow = 'Workflow', 6 | Knowledge = 'Knowledge', 7 | // 模板 8 | Template = 'Template', 9 | } 10 | 11 | // 自定义广场-模板目标类型(全部、智能体、工作流、页面应用) 12 | export enum SquareTemplateTargetTypeEnum { 13 | // 全部 14 | All = 'All', 15 | // 智能体 16 | Agent = 'Agent', 17 | // 工作流 18 | Workflow = 'Workflow', 19 | // 应用页面 20 | Page = 'Page', 21 | } 22 | -------------------------------------------------------------------------------- /mock/userAPI.ts: -------------------------------------------------------------------------------- 1 | const users = [ 2 | { id: 0, name: 'Umi', nickName: 'U', gender: 'MALE' }, 3 | { id: 1, name: 'Fish', nickName: 'B', gender: 'FEMALE' }, 4 | ]; 5 | 6 | export default { 7 | 'GET /api/v1/queryUserList': (req: any, res: any) => { 8 | res.json({ 9 | success: true, 10 | data: { list: users }, 11 | errorCode: 0, 12 | }); 13 | }, 14 | 'PUT /api/v1/user/': (req: any, res: any) => { 15 | res.json({ 16 | success: true, 17 | errorCode: 0, 18 | }); 19 | }, 20 | }; 21 | -------------------------------------------------------------------------------- /src/assets/icons/design/margin_left.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/components/CreateKnowledge/SkillListEmpty/index.tsx: -------------------------------------------------------------------------------- 1 | import classNames from 'classnames'; 2 | import React from 'react'; 3 | import styles from './index.less'; 4 | 5 | const cx = classNames.bind(styles); 6 | 7 | const SkillListEmpty: React.FC<{ 8 | title?: string; 9 | onClick?: (e: React.MouseEvent) => void; 10 | }> = ({ title = '请选择工作流', onClick }) => ( 11 |
12 | {title} 13 |
14 | ); 15 | 16 | export default SkillListEmpty; 17 | -------------------------------------------------------------------------------- /src/components/ChatView/AttachFile/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .files-container { 4 | display: grid; 5 | grid-template-columns: repeat(2, auto); 6 | gap: 10px; 7 | margin-bottom: 10px; 8 | 9 | .file-box { 10 | position: relative; 11 | padding: 10px; 12 | background-color: @WHITE04; 13 | border-radius: 10px; 14 | font-size: 14px; 15 | color: @BLANK24; 16 | 17 | img { 18 | width: 50px; 19 | margin-right: 5px; 20 | border-radius: 10px; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/assets/icons/design/margin_vertical.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | -------------------------------------------------------------------------------- /src/components/EcosystemCard/SharedIcon/images.constants.ts: -------------------------------------------------------------------------------- 1 | // MCP状态图标 2 | import { ReactComponent as ICON_EDIT } from './images/icon_edit.svg'; 3 | import { ReactComponent as ICON_OFFLINED } from './images/icon_offlined.svg'; 4 | import { ReactComponent as ICON_PUBLISHED } from './images/icon_published.svg'; 5 | import { ReactComponent as ICON_REJECTED } from './images/icon_rejected.svg'; 6 | import { ReactComponent as ICON_SEAL } from './images/icon_seal.svg'; 7 | 8 | export { ICON_EDIT, ICON_OFFLINED, ICON_PUBLISHED, ICON_REJECTED, ICON_SEAL }; 9 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/Header/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .logo { 4 | width: 32px; 5 | height: 32px; 6 | border-radius: 8px; 7 | } 8 | 9 | .add-agent { 10 | margin: 40px 0 10px; 11 | width: 40px; 12 | height: 40px; 13 | } 14 | 15 | .divider-horizontal { 16 | width: 24px; 17 | margin: 12px 0; 18 | border-bottom: 1px solid @GRAY02; 19 | } 20 | 21 | .logo-container { 22 | height: 52px; 23 | display: flex; 24 | align-items: center; 25 | justify-content: center; 26 | margin-bottom: 24px; 27 | } 28 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/ComponentSettingModal/CardBind/BindDataSource/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .space-box { 4 | gap: 8px; 5 | 6 | .radius-number { 7 | width: 30px; 8 | height: 30px; 9 | line-height: 30px; 10 | border-radius: 50%; 11 | text-align: center; 12 | color: @WHITE; 13 | background-color: @BLUE03; 14 | } 15 | } 16 | 17 | .link-switch { 18 | position: absolute; 19 | right: 0; 20 | top: -25px; 21 | } 22 | 23 | .footer { 24 | text-align: right; 25 | } 26 | -------------------------------------------------------------------------------- /src/hooks/useSendCode.ts: -------------------------------------------------------------------------------- 1 | import { apiSendCode } from '@/services/account'; 2 | import { message } from 'antd'; 3 | import { useRequest } from 'umi'; 4 | 5 | const useSendCode = () => { 6 | // 发送验证码 7 | const { run: runSendCode, loading: sendLoading } = useRequest(apiSendCode, { 8 | manual: true, 9 | debounceInterval: 300, 10 | onSuccess: () => { 11 | message.success('验证码已发送'); 12 | }, 13 | }); 14 | 15 | return { 16 | runSendCode, 17 | sendLoading, 18 | }; 19 | }; 20 | 21 | export default useSendCode; 22 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/ComponentSettingModal/InvokeType/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | height: 100%; 6 | padding: 50px 24px 24px; 7 | padding-left: 20px; 8 | background-color: @WHITE; 9 | overflow: hidden; 10 | 11 | h3 { 12 | font-weight: @fontWeightStrong; 13 | margin-bottom: 20px; 14 | 15 | .icon { 16 | color: @BLANK11; 17 | font-size: 14px; 18 | } 19 | } 20 | 21 | .footer { 22 | text-align: right; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/ComponentSettingModal/OutputWay/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | height: 100%; 6 | padding: 50px 24px 24px; 7 | padding-left: 20px; 8 | background-color: @WHITE; 9 | overflow: hidden; 10 | 11 | h3 { 12 | font-weight: @fontWeightStrong; 13 | margin-bottom: 20px; 14 | 15 | .icon { 16 | color: @BLANK11; 17 | font-size: 14px; 18 | } 19 | } 20 | 21 | .footer { 22 | text-align: right; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/assets/icons/common/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/design/align_center.svg: -------------------------------------------------------------------------------- 1 | 8 | 15 | 22 | 29 | -------------------------------------------------------------------------------- /src/assets/icons/design/align_justify.svg: -------------------------------------------------------------------------------- 1 | 8 | 15 | 22 | 29 | -------------------------------------------------------------------------------- /src/assets/icons/design/align_left.svg: -------------------------------------------------------------------------------- 1 | 8 | 15 | 22 | 29 | -------------------------------------------------------------------------------- /src/assets/icons/design/align_right.svg: -------------------------------------------------------------------------------- 1 | 8 | 15 | 22 | 29 | -------------------------------------------------------------------------------- /src/assets/icons/design/margin_horizontal.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | -------------------------------------------------------------------------------- /src/assets/icons/design/padding_bottom.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/icons/design/padding_left.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/icons/design/padding_right.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/icons/design/padding_top.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/components/ShowStand/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .inner-container { 4 | padding: 10px; 5 | height: 100%; 6 | overflow-y: hidden; // 添加这行,使内容溢出时显示垂直滚动条 7 | &:hover { 8 | overflow-y: scroll; 9 | } 10 | 11 | position: relative; 12 | 13 | .card-item-container { 14 | position: absolute; 15 | //width: 381px; 16 | left: 10px; 17 | width: 100%; 18 | max-width: 400px; 19 | 20 | .card-style-two { 21 | background-color: @WHITE01; 22 | border-radius: 6px; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/pages/Antv-X6/component/nodeItem.less: -------------------------------------------------------------------------------- 1 | .array-link-setting { 2 | width: 330px; 3 | font-size: 12px; 4 | 5 | .array-link-setting-select-label { 6 | margin-top: 40px; 7 | font-size: 14px; 8 | } 9 | 10 | .array-link-setting-select { 11 | width: 95%; 12 | } 13 | 14 | .array-link-setting-select-option { 15 | position: relative; 16 | } 17 | 18 | .array-link-setting-select-option-icon { 19 | margin-right: 4px; 20 | width: 16px; // Adjust based on icon size 21 | display: inline-block; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/pages/Home/DraggableHomeContent/constants.ts: -------------------------------------------------------------------------------- 1 | export const DRAG_TYPES = { 2 | CATEGORY: 'CATEGORY', 3 | AGENT: 'AGENT', 4 | } as const; 5 | 6 | export const HOVER_TEXTS = { 7 | CATEGORY: '可拖拽更换栏目顺序', 8 | AGENT: '可拖拽更换智能体顺序', 9 | } as const; 10 | 11 | // 添加其他可能的常量 12 | export const LOADING_MESSAGES = { 13 | UPDATING_SORT: '正在更新排序...', 14 | } as const; 15 | 16 | export const SUCCESS_MESSAGES = { 17 | SORT_SUCCESS: '排序更新成功', 18 | } as const; 19 | 20 | export const ERROR_MESSAGES = { 21 | SORT_FAILED: '排序更新失败,请重试', 22 | } as const; 23 | -------------------------------------------------------------------------------- /k8s/config/frontend-deployment.yaml: -------------------------------------------------------------------------------- 1 | # frontend-deployment.yaml 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | name: agent-frontend-deployment 6 | spec: 7 | replicas: 1 8 | selector: 9 | matchLabels: 10 | app: agent-frontend 11 | template: 12 | metadata: 13 | labels: 14 | app: agent-frontend 15 | spec: 16 | containers: 17 | - name: agent-frontend 18 | image: localhost:5000/agent-platform-front:latest 19 | ports: 20 | - containerPort: 80 21 | - containerPort: 443 -------------------------------------------------------------------------------- /src/components/ChatTitleActions/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .title-actions { 5 | display: flex; 6 | align-items: center; 7 | margin-left: @margin; 8 | } 9 | 10 | // 收藏状态样式 11 | .collected { 12 | color: @orange; 13 | } 14 | 15 | /* 响应式样式 */ 16 | @media screen and (max-width: 720px) { 17 | .title-actions { 18 | margin-left: 0; 19 | justify-content: center; 20 | } 21 | } 22 | 23 | @media screen and (max-width: 480px) { 24 | .title-actions { 25 | margin-left: 0; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/components/CreateKnowledge/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .header { 5 | gap: 28px; 6 | margin: 30px 0; 7 | } 8 | 9 | .box { 10 | gap: 4px; 11 | width: 130px; 12 | height: 70px; 13 | border-radius: 10px; 14 | background: @WHITE06; 15 | box-sizing: border-box; 16 | border: 1px solid @GRAY04; 17 | font-size: 18px; 18 | font-weight: @fontWeightStrong; 19 | color: @BLANK04; 20 | transition: border-color 0.3s; 21 | 22 | &.active { 23 | border-color: @BLUE02; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/constants/square.constants.ts: -------------------------------------------------------------------------------- 1 | import { SquareTemplateTargetTypeEnum } from '@/types/enums/square'; 2 | 3 | // 广场-模板分类列表 4 | export const SQUARE_TEMPLATE_SEGMENTED_LIST = [ 5 | { 6 | value: SquareTemplateTargetTypeEnum.All, 7 | label: '全部', 8 | }, 9 | { 10 | value: SquareTemplateTargetTypeEnum.Agent, 11 | label: '智能体', 12 | }, 13 | { 14 | value: SquareTemplateTargetTypeEnum.Workflow, 15 | label: '工作流', 16 | }, 17 | { 18 | value: SquareTemplateTargetTypeEnum.Page, 19 | label: '应用页面', 20 | }, 21 | ]; 22 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/OpenRemarksEdit/GuidQuestionSetModal/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .star { 4 | color: @RED; 5 | } 6 | 7 | .input-box { 8 | margin-top: 16px; 9 | font-size: 12px; 10 | cursor: pointer; 11 | } 12 | 13 | // Table 折叠动画 14 | .table-collapse-wrapper { 15 | max-height: 0; 16 | overflow: hidden; 17 | transition: max-height 0.3s ease-in-out; 18 | } 19 | 20 | .table-collapse-active { 21 | max-height: 600px; 22 | } 23 | 24 | .modal-body { 25 | max-height: 500px; 26 | overflow-y: auto; 27 | } 28 | -------------------------------------------------------------------------------- /src/pages/Chat/ShowArea/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token'; 2 | 3 | .rightSidebar { 4 | width: 434px; 5 | //padding: 0 @padding; 6 | border-left: @lineWidth @lineType @colorBorderSecondary; 7 | } 8 | 9 | .container { 10 | position: sticky; 11 | height: 100%; 12 | box-sizing: border-box; 13 | z-index: 999; 14 | 15 | .box { 16 | // margin-top: 30px; 17 | } 18 | 19 | .main-wrap { 20 | // padding: 30px 12px; 21 | } 22 | } 23 | 24 | @media (max-width: 768px) { 25 | .container { 26 | display: none !important; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/components/LabelStar/index.tsx: -------------------------------------------------------------------------------- 1 | import type { LabelStarProps } from '@/types/interfaces/library'; 2 | import classNames from 'classnames'; 3 | import React from 'react'; 4 | import styles from './index.less'; 5 | 6 | const cx = classNames.bind(styles); 7 | 8 | const LabelStar: React.FC = ({ className, label }) => { 9 | return ( 10 | 11 | {label} 12 | * 13 | 14 | ); 15 | }; 16 | 17 | export default LabelStar; 18 | -------------------------------------------------------------------------------- /src/components/base/FileTypeIcon/index.less: -------------------------------------------------------------------------------- 1 | .file-type-icon { 2 | display: inline-block; 3 | border-radius: 4px; 4 | overflow: hidden; 5 | 6 | // 图标样式 7 | img { 8 | object-fit: cover; 9 | border-radius: 4px; 10 | } 11 | 12 | // 文件类型图标特殊样式 13 | &[src*='doc.png'], 14 | &[src*='excel.png'], 15 | &[src*='media.png'], 16 | &[src*='pdf.png'], 17 | &[src*='ppt.png'] { 18 | background-color: #f5f5f5; 19 | border: 1px solid #e8e8e8; 20 | 21 | img { 22 | padding: 8px; 23 | background-color: transparent; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/CreateVariables/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .table-container { 4 | :global { 5 | .ant-table-content .ant-table-thead > tr > th { 6 | padding-left: 0; 7 | font-size: 14px; 8 | color: @GRAY05; 9 | } 10 | 11 | .ant-table-content .ant-table-tbody > tr > td { 12 | padding: 10px 10px 10px 0; 13 | color: @BLANK04; 14 | font-size: 12px; 15 | } 16 | 17 | .ant-table-footer { 18 | padding: 10px 0; 19 | background-color: transparent; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/utils/mcp.ts: -------------------------------------------------------------------------------- 1 | import { DeployStatusEnum } from '@/types/enums/mcp'; 2 | 3 | // 获取mcp部署状态 4 | export const getMcpDeployStatus = (status?: DeployStatusEnum) => { 5 | switch (status) { 6 | case DeployStatusEnum.Initialization: 7 | return '待部署'; 8 | case DeployStatusEnum.Deploying: 9 | return '部署中'; 10 | case DeployStatusEnum.Deployed: 11 | return '已部署'; 12 | case DeployStatusEnum.DeployFailed: 13 | return '部署失败'; 14 | case DeployStatusEnum.Stopped: 15 | return '已停止'; 16 | default: 17 | return ''; 18 | } 19 | }; 20 | -------------------------------------------------------------------------------- /src/types/global.d.ts: -------------------------------------------------------------------------------- 1 | // interface Window { 2 | // publicPath?: string; 3 | // } 4 | declare namespace Global { 5 | interface Pagination { 6 | total: number; 7 | pageSize: number; 8 | current: number; 9 | } 10 | 11 | interface IGetList { 12 | pageNo: number; 13 | pageSize: number; 14 | category?: string; 15 | kw?: string; 16 | spaceId?: number; 17 | dataType?: string; 18 | justReturnSpaceData?: boolean; 19 | } 20 | } 21 | 22 | // 扩展全局作用域 23 | declare global { 24 | interface Window { 25 | Global: typeof Global; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/pages/SpacePageDevelop/PathParamsConfigModal/PathParamsConfigContent/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | position: relative; 6 | height: 100%; 7 | padding-top: 50px; 8 | background-color: @WHITE; 9 | overflow: hidden; 10 | 11 | .add-btn { 12 | position: absolute; 13 | top: 10px; 14 | left: 0; 15 | width: 100px; 16 | margin-left: 16px; 17 | } 18 | 19 | .title { 20 | font-size: 14px; 21 | } 22 | 23 | .footer { 24 | padding: 24px 16px; 25 | text-align: right; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/assets/icons/design/padding_vertical.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/icons/design/padding_horizontal.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /src/pages/AppDev/components/PageEditModal/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .upload-avatar { 5 | width: 356px !important; 6 | height: 200px !important; 7 | } 8 | 9 | .text-tip { 10 | font-size: @fontSizeSm; 11 | color: @colorTextSecondary; 12 | } 13 | 14 | .modal-content { 15 | width: 560px; 16 | background-color: @WHITE12 !important; 17 | overflow: hidden; 18 | 19 | .modal-header { 20 | background-color: @WHITE12; 21 | } 22 | 23 | .modal-body { 24 | max-height: calc(100vh - 300px); 25 | overflow-y: auto; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/pages/SpaceMcpCreate/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color.less'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 0 10px; 6 | 7 | .main-container { 8 | width: 775px; 9 | margin: 0 auto; 10 | padding: 30px 0; 11 | 12 | .upload-box { 13 | display: block; 14 | margin: 30px auto 50px; 15 | } 16 | 17 | .sub-title { 18 | margin-left: 6px; 19 | font-size: 12px; 20 | font-weight: normal; 21 | color: @GRAY07; 22 | } 23 | 24 | .collapse-container { 25 | background-color: @WHITE; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /.env.local 3 | /.umirc.local.ts 4 | /config/config.local.ts 5 | /src/.umi 6 | /src/.umi-production 7 | /src/.umi-test 8 | /.umi 9 | /.umi-production 10 | /.umi-test 11 | /dist 12 | /.mfsu 13 | .swc 14 | /.idea 15 | /.yarn.lock 16 | package-lock.json 17 | 18 | # Ignore DevSpace cache and log folder 19 | .devspace/ 20 | 21 | /k8s 22 | /devspace.yaml 23 | /devspace_start.sh 24 | /Dockerfile 25 | 26 | # /.husky 27 | /src/mock 28 | .npm-cache 29 | 30 | # Claude local settings 31 | .claude/settings.local.json 32 | 33 | .claude 34 | .cursor 35 | .cursorrules 36 | .DS_Store 37 | -------------------------------------------------------------------------------- /src/models/model.ts: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | const useModelSetting = () => { 4 | const [open, setOpen] = useState(false); 5 | // 展开收起模型设置的弹窗 6 | const [show, setShow] = useState(false); 7 | // 展开收起提示词 8 | const [expand, setExpand] = useState(false); 9 | // 展开收起试运行 10 | const [testRun, setTestRun] = useState(false); 11 | 12 | return { 13 | open, 14 | setOpen, 15 | show, 16 | setShow, 17 | expand, 18 | setExpand, 19 | testRun, 20 | setTestRun, 21 | }; 22 | }; 23 | 24 | export default useModelSetting; 25 | -------------------------------------------------------------------------------- /src/pages/SpacePageDevelop/PageCreateModal/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .upload-avatar { 5 | width: 356px !important; 6 | height: 200px !important; 7 | } 8 | 9 | .text-tip { 10 | font-size: @fontSizeSm; 11 | color: @colorTextSecondary; 12 | } 13 | 14 | .modal-content { 15 | width: 560px; 16 | background-color: @WHITE12 !important; 17 | overflow: hidden; 18 | 19 | .modal-header { 20 | background-color: @WHITE12; 21 | } 22 | 23 | .modal-body { 24 | max-height: calc(100vh - 300px); 25 | overflow-y: auto; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/components/ChatView/ChatBottomDebug/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | height: 32px; 5 | color: @GRAY05; 6 | font-size: 12px; 7 | 8 | .elapsed-time { 9 | gap: 12px; 10 | 11 | .vertical-line { 12 | width: 1px; 13 | height: 12px; 14 | background-color: @GRAY05; 15 | } 16 | } 17 | 18 | .more-action { 19 | gap: 6px; 20 | 21 | .icon { 22 | width: 24px; 23 | height: 24px; 24 | font-size: 14px; 25 | color: @GRAY05; 26 | } 27 | } 28 | } 29 | 30 | .copy-image { 31 | width: 16px; 32 | height: 16px; 33 | } 34 | -------------------------------------------------------------------------------- /src/components/VersionHistory/PublishRecordItem/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | gap: 4px; 5 | padding: 10px 8px; 6 | font-size: 12px; 7 | border-bottom: 1px solid @GRAY06; 8 | position: relative; 9 | 10 | &:last-child { 11 | border-bottom-color: transparent; 12 | } 13 | 14 | .header { 15 | gap: 8px; 16 | 17 | .name { 18 | max-width: 60%; 19 | color: @BLUE04; 20 | } 21 | 22 | .author-update-time { 23 | color: @BLUE04; 24 | } 25 | } 26 | 27 | .desc { 28 | line-height: 20px; 29 | color: @BLANK04; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/pages/SpaceMcpEdit/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color.less'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 0 10px; 6 | overflow: hidden; 7 | 8 | .main-container { 9 | width: 775px; 10 | margin: 0 auto; 11 | padding: 30px 0; 12 | 13 | .upload-box { 14 | display: block; 15 | margin: 30px auto 50px; 16 | } 17 | 18 | .sub-title { 19 | margin-left: 6px; 20 | font-size: 12px; 21 | font-weight: normal; 22 | color: @GRAY07; 23 | } 24 | 25 | .collapse-container { 26 | background-color: @WHITE; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/types/enums/dataTable.ts: -------------------------------------------------------------------------------- 1 | // 字段类型:1:String(VARCHAR(255));2:Integer(INT);3:Number(DECIMAL(20,6));4:Boolean(TINYINT(1));5:Date(DATETIME);6:PrimaryKey(BIGINT);7:MEDIUMTEXT(MEDIUMTEXT) 2 | export enum TableFieldTypeEnum { 3 | // 短文本 4 | String = 1, 5 | // 整数 6 | Integer = 2, 7 | // 数字 8 | Number = 3, 9 | // 布尔 10 | Boolean = 4, 11 | // 日期 12 | Date = 5, 13 | // 主键 14 | PrimaryKey = 6, 15 | // 长文本,对应数据库类型: MEDIUMTEXT 16 | MEDIUMTEXT = 7, 17 | } 18 | 19 | // 数据表tabs枚举 20 | export enum TableTabsEnum { 21 | // 表结构 22 | Structure = 'Structure', 23 | // 表数据 24 | Data = 'Data', 25 | } 26 | -------------------------------------------------------------------------------- /src/assets/icons/common/console.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/base/McpStatus/images.constants.ts: -------------------------------------------------------------------------------- 1 | // MCP状态图标 2 | import { ReactComponent as ICON_DEPLOY_FAILED } from './images/icon_deploy_failed.svg'; 3 | import { ReactComponent as ICON_DEPLOYED } from './images/icon_deployed.svg'; 4 | import { ReactComponent as ICON_DEPLOYING } from './images/icon_deploying.svg'; 5 | import { ReactComponent as ICON_INITIALIZATION } from './images/icon_initialization.svg'; 6 | import { ReactComponent as ICON_STOPPED } from './images/icon_stopped.svg'; 7 | 8 | export { 9 | ICON_DEPLOY_FAILED, 10 | ICON_DEPLOYED, 11 | ICON_DEPLOYING, 12 | ICON_INITIALIZATION, 13 | ICON_STOPPED, 14 | }; 15 | -------------------------------------------------------------------------------- /.claude/settings.local.json: -------------------------------------------------------------------------------- 1 | { 2 | "includeCoAuthoredBy": false, 3 | "permissions": { 4 | "allow": [ 5 | "Bash(npm run build:dev:*)", 6 | "Bash(npm run)", 7 | "Bash(rg:*)", 8 | "Bash(git add:*)", 9 | "Bash(git reset:*)", 10 | "Bash(git push:*)", 11 | "Bash(tree:*)", 12 | "Bash(npm run type-check:*)", 13 | "Bash(timeout:*)", 14 | "Bash(git rm:*)", 15 | "Bash(git commit:*)", 16 | "Bash(git stash pop:*)", 17 | "Bash(npm run dev)", 18 | "Bash(cat:*)", 19 | "Bash(git config:*)" 20 | ], 21 | "deny": [], 22 | "ask": [] 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/User/UserAvatar/index.tsx: -------------------------------------------------------------------------------- 1 | import avatarImage from '@/assets/images/avatar.png'; 2 | import type { UserAvatarType } from '@/types/interfaces/layouts'; 3 | import classNames from 'classnames'; 4 | import React from 'react'; 5 | import styles from './index.less'; 6 | 7 | const cx = classNames.bind(styles); 8 | 9 | const UserAvatar: React.FC = ({ avatar, onClick }) => { 10 | return ( 11 |
12 | 13 |
14 | ); 15 | }; 16 | 17 | export default UserAvatar; 18 | -------------------------------------------------------------------------------- /src/assets/icons/chat/clock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/layouts/InfiniteList/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | height: 500px; 5 | padding-right: 5px; 6 | } 7 | 8 | .row { 9 | gap: 20px; 10 | color: @BLANK04; 11 | font-size: 12px; 12 | background-color: @WHITE03; 13 | margin-bottom: 5px; 14 | 15 | p { 16 | padding: 5px 10px; 17 | } 18 | 19 | span { 20 | color: @GRAY07; 21 | display: inline-block; 22 | } 23 | 24 | .icon { 25 | padding: 5px 10px; 26 | display: none; 27 | } 28 | 29 | &:hover { 30 | background-color: @WHITE18; 31 | 32 | .icon { 33 | display: inline-block; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | border-left: @lineWidth solid @colorSplit; 6 | padding: @paddingXs @padding; 7 | width: 50%; 8 | //隐藏滚动条 9 | &::-webkit-scrollbar { 10 | display: none; 11 | } 12 | } 13 | 14 | .text { 15 | color: @colorTextTertiary; 16 | font-size: @fontSizeSm; 17 | line-height: @lineHeight; 18 | } 19 | 20 | .page-setting-item { 21 | height: 40px; 22 | border-radius: 3px; 23 | border-bottom: 1px solid @GRAY01; 24 | 25 | &:last-child { 26 | border-bottom-color: transparent; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/constants/home.constants.ts: -------------------------------------------------------------------------------- 1 | export const ACCESS_TOKEN = 'ACCESS_TOKEN'; 2 | export const USER_INFO = 'USER_INFO'; 3 | // expireDate 4 | export const EXPIRE_DATE = 'EXPIRE_DATE'; 5 | export const PHONE = 'PHONE'; 6 | export const SPACE_ID = 'SPACE_ID'; 7 | export const SPACE_URL = 'SPACE_URL'; 8 | 9 | // 租户配置信息 10 | export const TENANT_CONFIG_INFO = 'TENANT_CONFIG_INFO'; 11 | 12 | // 应用版本号存储 key 13 | export const APP_VERSION = 'APP_VERSION'; 14 | 15 | // 推荐聊天主题 16 | export const RECOMMEND_TEXT = [ 17 | '女娲智能体设计平台功能概述', 18 | '自然语言处理实用教材推荐', 19 | '女娲智能体设计平台使用手册', 20 | '准备考研,在大二下学期需要开始准备哪些方面?', 21 | '准备考研,在大二下学期需要开始准备哪些方面?', 22 | ]; 23 | -------------------------------------------------------------------------------- /src/pages/Antv-X6/component/pluginNode.less: -------------------------------------------------------------------------------- 1 | .border-bottom { 2 | border-bottom: 1px solid #e8e8e8; 3 | } 4 | 5 | .node-form-label-style { 6 | width: 126px; 7 | } 8 | 9 | .margin-bottom-10 { 10 | margin-bottom: 10px; 11 | } 12 | 13 | .form-name-style { 14 | max-width: 100px; 15 | overflow: hidden; 16 | } 17 | 18 | .input-item-style { 19 | display: flex; 20 | 21 | .margin-right-6 { 22 | margin-right: 6px; 23 | } 24 | } 25 | 26 | .knowledge-node-box { 27 | // background-color: #cccc; 28 | padding: 10px; 29 | font-size: 12px; 30 | color: #838181; 31 | 32 | .left-label-style { 33 | width: 120px; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/assets/icons/chat/info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/types/interfaces/message.ts: -------------------------------------------------------------------------------- 1 | import type { MessageReadStatusEnum } from '@/types/enums/menus'; 2 | import type { CreatorInfo } from '@/types/interfaces/agent'; 3 | 4 | // 查询用户消息列表输入参数 5 | export interface NotifyMessageListParams { 6 | // 最后消息ID 7 | lastId?: number; 8 | // 查询条数 9 | size: number; 10 | // 消息状态,可用值:Unread,Read 11 | readStatus?: MessageReadStatusEnum; 12 | } 13 | 14 | // 用户消息信息 15 | export interface NotifyMessageInfo { 16 | id: number; 17 | // 消息内容 18 | content: string; 19 | // 消息状态,可用值:Unread,Read 20 | readStatus: MessageReadStatusEnum; 21 | sender: CreatorInfo; 22 | // 创建时间(消息发送时间) 23 | created: string; 24 | } 25 | -------------------------------------------------------------------------------- /src/components/ChatView/ChatBottomMore/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | height: 32px; 6 | color: @colorTextDescription; 7 | font-size: @fontSizeSm; 8 | 9 | .elapsed-time { 10 | gap: 12px; 11 | 12 | .vertical-line { 13 | width: 1px; 14 | height: 12px; 15 | background-color: @GRAY05; 16 | } 17 | } 18 | 19 | .more-action { 20 | gap: 6px; 21 | 22 | .icon { 23 | width: 24px; 24 | height: 24px; 25 | font-size: 14px; 26 | color: @GRAY05; 27 | } 28 | } 29 | } 30 | 31 | .copy-image { 32 | width: 16px; 33 | height: 16px; 34 | } 35 | -------------------------------------------------------------------------------- /src/assets/icons/common/import.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/UserRelAgent/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .row { 4 | padding: 6px 8px; 5 | gap: 10px; 6 | 7 | &:hover { 8 | .icon { 9 | visibility: visible; 10 | } 11 | } 12 | 13 | img { 14 | width: 16px; 15 | height: 16px; 16 | border-radius: 4px; 17 | } 18 | 19 | .name { 20 | font-size: 14px; 21 | line-height: 22px; 22 | color: @BLANK04; 23 | } 24 | 25 | .icon { 26 | color: @GRAY05; 27 | visibility: hidden; 28 | border-radius: 4px; 29 | transition: background-color ease-in-out 0.2s; 30 | 31 | &:hover { 32 | background-color: @WHITE14; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/assets/icons/chat/chat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/NoMoreDivider/index.tsx: -------------------------------------------------------------------------------- 1 | import { Divider } from 'antd'; 2 | import classNames from 'classnames'; 3 | import React from 'react'; 4 | import styles from './index.less'; 5 | 6 | const cx = classNames.bind(styles); 7 | 8 | export interface NoMoreDividerProps { 9 | /** 自定义文本,默认为"没有更多了" */ 10 | text?: string; 11 | } 12 | 13 | const NoMoreDivider: React.FC = ({ 14 | text = '没有更多了', 15 | }) => { 16 | return ( 17 |
18 | 19 | {text} 20 | 21 |
22 | ); 23 | }; 24 | 25 | export default NoMoreDivider; 26 | -------------------------------------------------------------------------------- /src/assets/icons/nav/message.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/chat/close_regular.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/Card/CardFour/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 16px 20px; 6 | border-bottom: 1px solid @GRAY08; 7 | 8 | &:last-child { 9 | border-bottom: none; 10 | } 11 | 12 | h3 { 13 | color: @BLANK31; 14 | margin-bottom: 6px; 15 | font-size: 16px; 16 | font-weight: @fontWeightStrong; 17 | word-break: break-all; 18 | } 19 | 20 | p { 21 | line-height: 20px; 22 | color: @GRAY05; 23 | font-size: 14px; 24 | word-break: break-all; 25 | } 26 | 27 | img { 28 | width: 40px; 29 | height: 40px; 30 | object-fit: cover; 31 | margin-left: 10px; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/components/Card/CardTwo/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 16px 20px; 6 | border-bottom: 1px solid @GRAY08; 7 | 8 | &:last-child { 9 | border-bottom: none; 10 | } 11 | 12 | h3 { 13 | color: @BLANK31; 14 | margin-bottom: 6px; 15 | font-size: 16px; 16 | font-weight: @fontWeightStrong; 17 | word-break: break-all; 18 | } 19 | 20 | p { 21 | line-height: 20px; 22 | color: @GRAY05; 23 | font-size: 14px; 24 | word-break: break-all; 25 | } 26 | 27 | img { 28 | width: 40px; 29 | height: 40px; 30 | object-fit: cover; 31 | margin-left: 10px; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/types/declare.d.ts: -------------------------------------------------------------------------------- 1 | // types/index.d.ts 2 | declare module 'react-beautiful-dnd'; 3 | declare module 'classnames'; 4 | declare module 'lodash'; 5 | declare module 'umi'; 6 | // 修改为monaco-editor自带的类型声明 7 | // 修正路径声明 8 | declare module 'monaco-editor/esm/vs/basic-languages/python/python' { 9 | import { languages } from 'monaco-editor'; 10 | export const conf: languages.LanguageConfiguration; 11 | export const language: languages.IMonarchLanguage; 12 | } 13 | 14 | // 添加Python worker类型声明 15 | // 修正为正确的Python worker路径 16 | declare module 'monaco-editor/esm/vs/basic-languages/python/python.worker' { 17 | export default class PythonWorker { 18 | constructor(ctx: any); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/hooks/useDisableSaveShortcut.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react'; 2 | 3 | /** 4 | * 禁用浏览器原生 Ctrl+S / Cmd+S 快捷键 5 | * @param onSave 可选,拦截后自定义保存逻辑 6 | */ 7 | const useDisableSaveShortcut = (onSave?: () => void) => { 8 | useEffect(() => { 9 | const handleKeyDown = (e: KeyboardEvent) => { 10 | if ((e.ctrlKey || e.metaKey) && e.key?.toLowerCase() === 's') { 11 | e.preventDefault(); 12 | if (onSave) onSave(); 13 | } 14 | }; 15 | window.addEventListener('keydown', handleKeyDown); 16 | return () => { 17 | window.removeEventListener('keydown', handleKeyDown); 18 | }; 19 | }, [onSave]); 20 | }; 21 | 22 | export default useDisableSaveShortcut; 23 | -------------------------------------------------------------------------------- /src/pages/Antv-X6/components/NewSkill/SettingModal.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .modal-container { 5 | width: 760px !important; 6 | } 7 | 8 | .container { 9 | height: 650px; 10 | border-radius: 10px; 11 | background: #fff; 12 | pointer-events: auto; 13 | 14 | .left { 15 | padding-left: 12px; 16 | padding-top: 12px; 17 | 18 | h3 { 19 | font-size: 22px; 20 | font-weight: @fontWeightStrong; 21 | color: @BLANK04; 22 | line-height: 2; 23 | } 24 | } 25 | 26 | .right { 27 | padding: 0; 28 | } 29 | 30 | .close { 31 | position: absolute; 32 | right: 20px; 33 | top: 20px; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/utils/model.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | GroupModelItem, 3 | ModelListItemProps, 4 | } from '@/types/interfaces/model'; 5 | // 根据apiProtocol将模型重组为二维数组 6 | export const groupModelsByApiProtocol = ( 7 | models: ModelListItemProps[], 8 | ): GroupModelItem[] => { 9 | const grouped: GroupModelItem[] = [ 10 | { label: 'OpenAI', options: [] }, 11 | { label: 'Ollama', options: [] }, 12 | ]; 13 | 14 | // 将模型分配到对应的分组 15 | models.forEach((model) => { 16 | const targetGroup = grouped.find( 17 | (group) => group.label === model.apiProtocol, 18 | ); 19 | if (targetGroup) { 20 | targetGroup.options.push(model); 21 | } 22 | }); 23 | 24 | return grouped; 25 | }; 26 | -------------------------------------------------------------------------------- /src/components/base/McpInstallType/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token.less'; 2 | 3 | .container { 4 | height: 24px; 5 | padding: 0 8px; 6 | border-radius: 4px; 7 | font-size: @fontSizeSm; 8 | font-weight: @fontWeightStrong; 9 | 10 | &.npx { 11 | color: #a84a00; 12 | background-color: #fff8ea; 13 | } 14 | 15 | &.uvx { 16 | color: #871e9e; 17 | background-color: #f7e9f7; 18 | } 19 | 20 | &.sse { 21 | color: #25772f; 22 | background-color: #ecf7ec; 23 | } 24 | 25 | &.streamable-http { 26 | color: #5e62c8; 27 | background-color: #e4ebe4; 28 | } 29 | 30 | &.component { 31 | color: #004fb3; 32 | background-color: #eaf5ff; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/pages/EditAgent/ArrangeTitle/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .edit-header { 5 | height: 32px; 6 | padding: @paddingXs @paddingLg; 7 | border-bottom: @lineWidth solid @colorSplit; 8 | box-sizing: content-box; 9 | 10 | h3 { 11 | font-size: 16px; 12 | //font-weight: @fontWeightStrong; 13 | color: @colorText; 14 | font-weight: 600; 15 | line-height: 24px; 16 | } 17 | 18 | .drop-box { 19 | gap: @marginXs; 20 | color: @colorText; 21 | font-size: 14px; 22 | font-weight: @fontWeightStrong; 23 | 24 | img { 25 | width: 22px; 26 | height: 22px; 27 | border-radius: 2px; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/pages/SpaceDevelop/ApplicationItem/ApplicationHeader/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .header { 4 | gap: 12px; 5 | 6 | .info-box { 7 | gap: 6px; 8 | margin-bottom: 4px; 9 | 10 | .title { 11 | line-height: 22px; 12 | font-size: 16px; 13 | color: @BLANK09; 14 | } 15 | } 16 | 17 | .desc { 18 | height: 40px; 19 | line-height: 20px; 20 | font-size: 14px; 21 | color: @GRAY07; 22 | } 23 | 24 | .logo-box { 25 | display: inline-block; 26 | width: 64px; 27 | height: 64px; 28 | border-radius: 10px; 29 | 30 | img { 31 | width: 100%; 32 | height: 100%; 33 | object-fit: cover; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/components/EcosystemDetailDrawer/ActivatedIcon.tsx: -------------------------------------------------------------------------------- 1 | import ActivatedImage from '@/assets/ecosystem/activated.png'; 2 | import { Image } from 'antd'; 3 | import classNames from 'classnames'; 4 | import styles from './index.less'; 5 | const cx = classNames.bind(styles); 6 | 7 | interface ActivatedIconProps { 8 | size?: number; 9 | } 10 | 11 | // 已启用图标 12 | const ActivatedIcon: React.FC = ({ size = 40 }) => { 13 | return ( 14 |
18 | 已启用 19 |
20 | ); 21 | }; 22 | 23 | export default ActivatedIcon; 24 | -------------------------------------------------------------------------------- /src/components/SiteFooter/index.tsx: -------------------------------------------------------------------------------- 1 | import { SiteFooterProps } from '@/types/interfaces/common'; 2 | import classNames from 'classnames'; 3 | import React from 'react'; 4 | import styles from './index.less'; 5 | 6 | const cx = classNames.bind(styles); 7 | 8 | // 页脚 9 | const SiteFooter: React.FC = ({ text }) => { 10 | return ( 11 | 21 | ); 22 | }; 23 | 24 | export default SiteFooter; 25 | -------------------------------------------------------------------------------- /src/assets/icons/nav/square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/Card/CardThree/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 16px 20px; 6 | border-bottom: 1px solid @GRAY08; 7 | 8 | &:last-child { 9 | border-bottom: none; 10 | } 11 | 12 | h3 { 13 | color: @BLANK31; 14 | margin-bottom: 6px; 15 | font-size: 16px; 16 | font-weight: @fontWeightStrong; 17 | word-break: break-all; 18 | } 19 | 20 | img { 21 | width: 100%; 22 | height: 100px; 23 | object-fit: cover; 24 | margin-top: 6px; 25 | } 26 | 27 | p { 28 | line-height: 20px; 29 | margin-top: 6px; 30 | color: @GRAY05; 31 | font-size: 14px; 32 | word-break: break-all; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/assets/svg/icon_more.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/hooks/useEcoMarket.ts: -------------------------------------------------------------------------------- 1 | import { apiEcoMarketClientConfigDelete } from '@/services/ecosystem'; 2 | import { modalConfirm } from '@/utils/ant-custom'; 3 | import { message } from 'antd'; 4 | 5 | const useEcoMarket = () => { 6 | // 我的分享 ~ 删除操作 7 | const onDeleteShare = (uid: string, name: string, onSuccess: () => void) => { 8 | modalConfirm('您确定要删除此分享吗?', name || '', async () => { 9 | await apiEcoMarketClientConfigDelete(uid); 10 | message.success('删除成功'); 11 | onSuccess(); 12 | return new Promise((resolve) => { 13 | setTimeout(resolve, 300); 14 | }); 15 | }); 16 | }; 17 | 18 | return { 19 | onDeleteShare, 20 | }; 21 | }; 22 | 23 | export default useEcoMarket; 24 | -------------------------------------------------------------------------------- /src/pages/EditAgent/PreviewAndDebug/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | flex: 4 1; 6 | min-width: 350px; 7 | border-left: @lineWidth solid @colorSplit; 8 | 9 | .loading { 10 | color: @BLUE08; 11 | } 12 | 13 | .main-content { 14 | gap: 20px; 15 | padding: 20px; 16 | 17 | .opening-chat-msg { 18 | line-height: 26px; 19 | font-size: 14px; 20 | text-align: center; 21 | } 22 | 23 | .chat-wrapper { 24 | margin: 0 auto; 25 | width: 100%; 26 | max-width: 800px; 27 | padding-bottom: 30px; 28 | mask: linear-gradient(180deg, @WHITE 91.89%, hsla(0deg, 0%, 100%, 0%)); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/pages/SpaceMcpEdit/McpEditItem/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color.less'; 2 | 3 | .container { 4 | width: 100%; 5 | padding: 15px 24px; 6 | border-radius: 10px; 7 | background: @WHITE; 8 | 9 | .name { 10 | font-size: 14px; 11 | color: @BLANK17; 12 | } 13 | 14 | .desc { 15 | font-size: 14px; 16 | line-height: 22px; 17 | color: @GRAY05; 18 | word-break: break-all; 19 | } 20 | 21 | .btn { 22 | background-color: @WHITE13; 23 | color: @BLUE05; 24 | border-color: @GRAY30; 25 | 26 | &:hover { 27 | background-color: @WHITE13 !important; 28 | border-color: transparent !important; 29 | color: @BLUE05; 30 | opacity: 0.8; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/layouts/Setting/ThemeSwitchPanel.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token'; 2 | 3 | .container { 4 | width: 100%; 5 | height: 100%; 6 | display: flex; 7 | flex: 1; 8 | flex-direction: column; 9 | } 10 | 11 | .title { 12 | font-weight: @fontWeightStrong; 13 | font-size: 22px; 14 | padding: @paddingLg; 15 | border-bottom: @lineWidth solid @colorSplit; 16 | color: @colorText; 17 | box-sizing: border-box; 18 | } 19 | 20 | .content { 21 | flex: 1; 22 | padding: @paddingLg; 23 | 24 | .configContainer { 25 | margin-bottom: @paddingXl; 26 | } 27 | 28 | .configItem { 29 | margin-bottom: @paddingMd; 30 | padding: 0; 31 | 32 | &:last-child { 33 | margin-bottom: 0; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/pages/Home/DraggableHomeContent/types.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | CategoryItemInfo, 3 | HomeAgentCategoryInfo, 4 | } from '@/types/interfaces/agentConfig'; 5 | 6 | export interface DragResult { 7 | destination: { 8 | droppableId: string; 9 | index: number; 10 | } | null; 11 | source: { 12 | droppableId: string; 13 | index: number; 14 | }; 15 | type: 'CATEGORY' | 'AGENT'; 16 | } 17 | 18 | export interface DraggableHomeContentProps { 19 | homeCategoryInfo: HomeAgentCategoryInfo; 20 | activeTab?: string; 21 | onTabClick: (type: string) => void; 22 | onAgentClick: (targetId: number) => void; 23 | onToggleCollect: (type: string, info: CategoryItemInfo) => void; 24 | onDataUpdate: () => void; 25 | } 26 | -------------------------------------------------------------------------------- /src/components/Card/CardThree/index.tsx: -------------------------------------------------------------------------------- 1 | import { CardChildProps } from '@/types/interfaces/cardInfo'; 2 | import classNames from 'classnames'; 3 | import React from 'react'; 4 | import styles from './index.less'; 5 | 6 | const cx = classNames.bind(styles); 7 | 8 | /** 9 | * 卡片三 10 | */ 11 | const CardThree: React.FC = ({ 12 | className, 13 | title, 14 | content, 15 | onClick, 16 | }) => { 17 | return ( 18 |
22 |

{title}

23 |

{content}

24 |
25 | ); 26 | }; 27 | 28 | export default CardThree; 29 | -------------------------------------------------------------------------------- /src/assets/icons/design/opacity.svg: -------------------------------------------------------------------------------- 1 | 7 | 17 | 24 | -------------------------------------------------------------------------------- /src/pages/SpaceLibrary/CreateModel/IntranetServerCommand/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | width: 560px; 5 | border-radius: 10px !important; 6 | background-color: @WHITE12 !important; 7 | 8 | .header { 9 | background-color: @WHITE12 !important; 10 | } 11 | 12 | .body { 13 | padding-top: 36px !important; 14 | } 15 | 16 | .sub-title { 17 | font-size: 14px; 18 | color: @BLUE02; 19 | } 20 | 21 | .box { 22 | line-height: 22px; 23 | padding: 10px 8px; 24 | margin: 10px 0 20px; 25 | color: @GRAY07; 26 | font-size: 12px; 27 | border-radius: 5px; 28 | background: @WHITE; 29 | box-sizing: border-box; 30 | border: 1px solid @WHITE15; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/components/Card/CardOne/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 16px 20px; 6 | border-bottom: 1px solid @GRAY08; 7 | 8 | &:last-child { 9 | border-bottom: none; 10 | } 11 | 12 | img { 13 | width: 60px; 14 | height: 60px; 15 | object-fit: cover; 16 | } 17 | 18 | .box { 19 | margin-left: 10px; 20 | 21 | h3 { 22 | color: @BLANK31; 23 | margin-bottom: 6px; 24 | font-size: 16px; 25 | font-weight: @fontWeightStrong; 26 | word-break: break-all; 27 | } 28 | 29 | p { 30 | line-height: 20px; 31 | color: @GRAY05; 32 | font-size: 14px; 33 | word-break: break-all; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/components/ModelSetting/type.ts: -------------------------------------------------------------------------------- 1 | import type { ModelListItemProps } from '@/types/interfaces/model'; 2 | import { NodeConfig } from '@/types/interfaces/node'; 3 | import type { FormInstance } from 'antd'; 4 | // type.ts 或 types/index.ts 5 | interface GroupModelItem { 6 | // 分组的名称 7 | label: string; 8 | options: ModelListItemProps[]; 9 | } 10 | 11 | export interface GroupModel { 12 | label: string; 13 | options: ModelListItemProps[]; 14 | } 15 | 16 | // 定义分组的模型列表 17 | export interface GroupModelListItemProps { 18 | onChange: (value: NodeConfig) => void; 19 | nodeConfig: NodeConfig; 20 | groupedOptionsData?: GroupModelItem[]; 21 | } 22 | 23 | export interface ModelSettingProp { 24 | form: FormInstance; 25 | modelConfig?: any; 26 | } 27 | -------------------------------------------------------------------------------- /src/components/base/AgentType/images/icon_knowledge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/custom/Loading/index.tsx: -------------------------------------------------------------------------------- 1 | import { LoadingOutlined } from '@ant-design/icons'; 2 | import classNames from 'classnames'; 3 | import React from 'react'; 4 | import styles from './index.less'; 5 | 6 | const cx = classNames.bind(styles); 7 | 8 | export interface LoadingProps { 9 | className?: string; 10 | } 11 | 12 | const Loading: React.FC = ({ className }) => { 13 | return ( 14 |
24 | 25 | 加载中... 26 |
27 | ); 28 | }; 29 | 30 | export default Loading; 31 | -------------------------------------------------------------------------------- /src/pages/SpaceTable/StructureTable/ClearDataTooltip/index.tsx: -------------------------------------------------------------------------------- 1 | import { TableFieldInfo } from '@/types/interfaces/dataTable'; 2 | import { Tooltip } from 'antd'; 3 | import { PropsWithChildren } from 'react'; 4 | 5 | export interface ClearDataTooltipProps { 6 | record: TableFieldInfo; 7 | existTableDataFlag?: boolean; 8 | } 9 | 10 | const ClearDataTooltip: React.FC> = ({ 11 | record, 12 | existTableDataFlag, 13 | children, 14 | }) => { 15 | const disabled = 16 | record?.systemFieldFlag || (!record?.isNew && existTableDataFlag); 17 | if (!disabled) { 18 | return children; 19 | } 20 | return {children}; 21 | }; 22 | 23 | export default ClearDataTooltip; 24 | -------------------------------------------------------------------------------- /src/assets/icons/common/export.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/constants/codes.constants.ts: -------------------------------------------------------------------------------- 1 | // 修改请求状态码 2 | 3 | class Constant { 4 | //request succeed 5 | static success = '0000'; 6 | static warning = 99; 7 | } 8 | 9 | export default Constant; 10 | 11 | export const SUCCESS_CODE = '0000'; 12 | // 用户未登录 13 | export const USER_NO_LOGIN = '4010'; 14 | // 重定向登录 15 | export const REDIRECT_LOGIN = '4011'; 16 | // 智能体不存在或已下架 17 | export const AGENT_NOT_EXIST = '0001'; 18 | 19 | /** 20 | * 智能体页面开发聊天服务错误状态码 --start 21 | */ 22 | 23 | // 智能体服务运行中的错误状态 24 | export const AGENT_SERVICE_RUNNING = '9010'; 25 | // 智能体没有配置默认聊天模型(0001与上面的状态码重复了, 为了语义化清晰, 所以这里单独定义) 26 | export const AGENT_NO_CONFIG_MODEL = '0001'; 27 | // 智能体AI聊天错误(普通错误) 28 | export const AGENT_AI_CHAT_ERROR = '9999'; 29 | 30 | /** 31 | * 智能体服务错误状态码 --end 32 | */ 33 | -------------------------------------------------------------------------------- /src/types/enums/systemManage.ts: -------------------------------------------------------------------------------- 1 | // 系统管理列表枚举 2 | export enum SystemManageListEnum { 3 | // 用户管理 4 | User_Manage, 5 | // 发布审核 6 | Publish_Audit, 7 | // 已发布管理 8 | Published_Manage, 9 | // 全局模型管理 10 | Global_Model_Manage, 11 | // 系统配置 12 | System_Config, 13 | // 主题配置 14 | Theme_Config, 15 | } 16 | 17 | // 系统管理-用户管理-角色枚举 18 | export enum UserRoleEnum { 19 | Admin = 'Admin', 20 | User = 'User', 21 | } 22 | 23 | // 系统管理-用户管理-状态枚举 24 | export enum UserStatusEnum { 25 | Enabled = 'Enabled', 26 | Disabled = 'Disabled', 27 | } 28 | 29 | // 消息类型, Broadcast时可以不传userIds,可用值:Broadcast,Private,System 30 | export enum MessageScopeEnum { 31 | Broadcast = 'Broadcast', // 广播 32 | Private = 'Private', // 私信 33 | System = 'System', // 系统消息 34 | } 35 | -------------------------------------------------------------------------------- /src/components/base/AgentType/images.constants.ts: -------------------------------------------------------------------------------- 1 | import { ReactComponent as ICON_AGENT } from './images/icon_agent.svg'; 2 | import { ReactComponent as ICON_KNOWLEDGE } from './images/icon_knowledge.svg'; 3 | import { ReactComponent as ICON_MODEL } from './images/icon_model.svg'; 4 | import { ReactComponent as ICON_PAGE_APP } from './images/icon_page_app.svg'; 5 | import { ReactComponent as ICON_PLUGIN } from './images/icon_plugin.svg'; 6 | import { ReactComponent as ICON_TABLE } from './images/icon_table.svg'; 7 | import { ReactComponent as ICON_WORKFLOW } from './images/icon_workflow.svg'; 8 | 9 | export { 10 | // 智能体类型图标 11 | ICON_AGENT, 12 | ICON_KNOWLEDGE, 13 | ICON_MODEL, 14 | ICON_PAGE_APP, 15 | ICON_PLUGIN, 16 | ICON_TABLE, 17 | ICON_WORKFLOW, 18 | }; 19 | -------------------------------------------------------------------------------- /src/components/TiptapVariableInput/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Tiptap Variable Input Component Entry 3 | * Tiptap 变量输入组件入口文件 4 | */ 5 | 6 | export { default } from './TiptapVariableInput'; 7 | export type { 8 | MentionItem, 9 | TiptapVariableInputProps, 10 | VariableSuggestionItem, 11 | } from './types'; 12 | 13 | // 导出扩展(供高级用户使用) 14 | export { HTMLTagProtection } from './extensions/HTMLTagProtection'; 15 | export { MentionNode } from './extensions/MentionNode'; 16 | export { MentionSuggestion } from './extensions/MentionSuggestion'; 17 | export { RawNode } from './extensions/RawNode'; 18 | export { ToolBlockNode } from './extensions/ToolBlockNode'; 19 | export { VariableNode } from './extensions/VariableNode'; 20 | export { VariableSuggestion } from './extensions/VariableSuggestion'; 21 | -------------------------------------------------------------------------------- /src/assets/icons/chat/collected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/workspace/knowledge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/icons/nav/home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/RecommendList/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | gap: @marginXs; 6 | 7 | .box { 8 | max-width: 100%; 9 | width: fit-content; 10 | line-height: 26px; 11 | padding: @paddingXxs @paddingSm; 12 | font-size: @fontSize; 13 | color: @colorText; 14 | border: @lineWidth solid @colorSplit; 15 | display: flex; 16 | justify-content: center; 17 | align-items: center; 18 | gap: 5px; 19 | 20 | .icon { 21 | width: 16px; 22 | height: 16px; 23 | border-radius: 4px; 24 | display: inline-block; 25 | } 26 | } 27 | } 28 | 29 | /* 当屏幕宽度小于等于 720px 时应用的样式 */ 30 | @media screen and (max-width: 720px) { 31 | .container { 32 | padding: 0 @paddingMd; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/models/squareModel.ts: -------------------------------------------------------------------------------- 1 | import type { SquareAgentInfo } from '@/types/interfaces/square'; 2 | import { useState } from 'react'; 3 | 4 | const useSquareModel = () => { 5 | const [agentInfoList, setAgentInfoList] = useState([]); 6 | const [pluginInfoList, setPluginInfoList] = useState([]); 7 | const [workflowInfoList, setWorkflowInfoList] = useState( 8 | [], 9 | ); 10 | const [templateList, setTemplateList] = useState([]); 11 | 12 | return { 13 | agentInfoList, 14 | setAgentInfoList, 15 | pluginInfoList, 16 | setPluginInfoList, 17 | workflowInfoList, 18 | setWorkflowInfoList, 19 | templateList, 20 | setTemplateList, 21 | }; 22 | }; 23 | 24 | export default useSquareModel; 25 | -------------------------------------------------------------------------------- /src/pages/SpaceTable/StructureTable/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .table-container { 4 | background: @WHITE03; 5 | 6 | .table-row { 7 | background: @WHITE03; 8 | } 9 | 10 | .icon { 11 | font-size: 12px; 12 | color: @BLANK17; 13 | margin-right: 8px; 14 | transform: rotate(-90deg); 15 | transition: transform 0.3s; // 添加过渡效果,使旋转更平滑; 16 | 17 | &.rotate-0 { 18 | transform: rotate(0deg); 19 | } 20 | 21 | &.icon-hidden { 22 | visibility: hidden; 23 | } 24 | } 25 | 26 | :global { 27 | .ant-table-cell-with-append { 28 | display: flex; 29 | align-items: center; 30 | } 31 | 32 | // 覆盖header的背景色 33 | .ant-table-thead > tr > th { 34 | background: @WHITE03 !important; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/assets/icons/chat/close_fill.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/common/straw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/plugins/ds-markdown-mermaid-plugin/index.ts: -------------------------------------------------------------------------------- 1 | import { MermaidBlock, rehypeMermaid } from 'ds-markdown-mermaid-plugin'; 2 | import { createBuildInPlugin, mermaidId } from 'ds-markdown/plugins'; 3 | 4 | // 移除 useMemo,直接定义配置对象 5 | const mermaidConfig = { 6 | theme: 'default', // 主题:default, neutral, dark, forest 7 | flowchart: { 8 | useMaxWidth: true, 9 | htmlLabels: true, 10 | }, 11 | sequence: { 12 | diagramMarginX: 50, 13 | diagramMarginY: 10, 14 | }, 15 | suppressErrorRendering: false, 16 | }; 17 | 18 | const mermaidPlugin = createBuildInPlugin({ 19 | id: mermaidId, 20 | rehypePlugin: [rehypeMermaid, { mermaidConfig }], 21 | components: { 22 | mermaidblock: MermaidBlock, 23 | }, 24 | }); 25 | 26 | export default mermaidPlugin; 27 | export { mermaidConfig }; 28 | -------------------------------------------------------------------------------- /src/services/event.ts: -------------------------------------------------------------------------------- 1 | import { EventTypeEnum } from '@/types/enums/event'; 2 | import { RequestResponse } from '@/types/interfaces/request'; 3 | import { request } from 'umi'; 4 | interface EventList { 5 | event: object; 6 | type: EventTypeEnum; 7 | } 8 | export interface ApiCollectEventResponse { 9 | hasEvent: boolean; 10 | eventList: EventList[]; 11 | version?: string; // 版本号 12 | } 13 | // 轮询获取事件 14 | export async function apiCollectEvent(): Promise< 15 | RequestResponse 16 | > { 17 | return request('/api/notify/event/collect/batch', { 18 | method: 'GET', 19 | }); 20 | } 21 | 22 | // 清除事件 23 | export async function apiClearEvent(): Promise> { 24 | return request('/api/notify/event/clear', { 25 | method: 'GET', 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /src/components/MarkdownCustomProcess/SeeDetailModal.less: -------------------------------------------------------------------------------- 1 | .see-detail-modal { 2 | :global { 3 | .ant-modal-content { 4 | padding: 16px; 5 | } 6 | } 7 | 8 | .see-detail-header { 9 | display: flex; 10 | align-items: center; 11 | justify-content: space-between; 12 | padding-right: 50px; 13 | height: 42px; 14 | 15 | .see-detail-header-title { 16 | flex: 1; 17 | } 18 | 19 | .see-detail-header-actions { 20 | :global { 21 | .ant-btn .ant-btn-icon { 22 | color: rgba(0, 0, 0, 45%); 23 | } 24 | 25 | .ant-btn:hover .ant-btn-icon { 26 | color: rgba(0, 0, 0, 88%); 27 | } 28 | } 29 | } 30 | } 31 | 32 | .see-detail-content { 33 | height: 400px; 34 | overflow: auto; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/hooks/useTexts.ts: -------------------------------------------------------------------------------- 1 | import { getTexts } from '@/utils/locales'; 2 | import { useMemo } from 'react'; 3 | import { useUnifiedTheme } from './useUnifiedTheme'; 4 | 5 | /** 6 | * 多语言文本 Hook 7 | * 根据当前语言设置返回对应的文本内容 8 | * 9 | * @returns 当前语言的文本对象 10 | * 11 | * @example 12 | * ```tsx 13 | * const MyComponent = () => { 14 | * const texts = useTexts(); 15 | * 16 | * return ( 17 | *
18 | *

{texts.title}

19 | * 20 | *
21 | * ); 22 | * }; 23 | * ``` 24 | */ 25 | export const useTexts = () => { 26 | const { data } = useUnifiedTheme(); 27 | 28 | const texts = useMemo(() => { 29 | return getTexts(data.language); 30 | }, [data.language]); 31 | 32 | return texts; 33 | }; 34 | 35 | export default useTexts; 36 | -------------------------------------------------------------------------------- /src/layouts/MobileMenu.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token'; 2 | 3 | .mobileMenuBtn { 4 | position: fixed; 5 | top: 10px; 6 | // left 位置现在通过内联样式动态设置 7 | z-index: 1000; 8 | transition: margin-left 0.3s; 9 | border-radius: 50%; 10 | border: @lineWidth solid @colorSplit; 11 | width: 20px; 12 | height: 20px; 13 | padding: 4px; 14 | box-sizing: content-box; 15 | display: flex; 16 | align-items: center; 17 | justify-content: center; 18 | background: @colorBgContainer; 19 | color: @colorTextSecondary; 20 | box-shadow: @navShadow; 21 | 22 | &:hover { 23 | background: @navItemHoverBg; 24 | transform: scale(1.1); 25 | } 26 | 27 | &:active { 28 | background: @navItemActiveBg; 29 | } 30 | } 31 | 32 | .mobileMenuMask { 33 | flex: 1; 34 | background: transparent; 35 | } 36 | -------------------------------------------------------------------------------- /src/components/EcosystemCard/SharedIcon/images/icon_rejected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/pages/SpaceLog/LogHeader/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .header { 5 | gap: 16px; 6 | border-bottom: 1px solid @BLANK01; 7 | 8 | .agent-logo { 9 | width: 42px; 10 | height: 42px; 11 | object-fit: cover; 12 | } 13 | 14 | .header-info { 15 | gap: 6px; 16 | 17 | .agent-name { 18 | font-size: 14px; 19 | font-weight: @fontWeightStrong; 20 | color: @BLANK04; 21 | } 22 | 23 | .user-info { 24 | gap: 6px; 25 | 26 | .avatar { 27 | width: 14px; 28 | height: 14px; 29 | border-radius: 50%; 30 | object-fit: cover; 31 | } 32 | 33 | .name { 34 | max-width: 200px; 35 | color: @GRAY05; 36 | font-size: 12px; 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/assets/icons/chat/user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/nav/user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/CodeEditor/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color.less'; 2 | 3 | .code-editor { 4 | height: 100%; 5 | border-radius: 10px; 6 | overflow: hidden; 7 | margin-bottom: 10px; 8 | } 9 | 10 | // 代码编辑器的样式 11 | .monaco-container { 12 | position: fixed; 13 | right: 384px; 14 | top: 78px; 15 | left: 10px; 16 | bottom: 10px; 17 | background-color: #fff; 18 | z-index: 101; 19 | box-sizing: border-box; 20 | overflow: hidden; 21 | padding: 16px; 22 | border-radius: 15px; 23 | box-shadow: 0 0 5px 0 @BLANK05; 24 | 25 | .monaco-editor-content { 26 | position: absolute; 27 | right: 12px; 28 | top: 60px; 29 | bottom: 12px; 30 | left: 12px; 31 | padding: 12px 0; 32 | background-color: #1e1e1e; 33 | border-radius: 12px; 34 | overflow: hidden; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/components/FormListItem/components/TreeColumnHeader.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | /** 4 | * 树列头组件的Props接口 5 | */ 6 | interface TreeColumnHeaderProps { 7 | /** 是否显示必填复选框 */ 8 | showCheck?: boolean; 9 | /** 是否为body类型 */ 10 | isBody?: boolean; 11 | } 12 | 13 | /** 14 | * 树列头组件 15 | * 负责渲染树的列标题,包括变量名、变量类型等 16 | */ 17 | const TreeColumnHeader: React.FC = ({ 18 | showCheck, 19 | isBody, 20 | }) => { 21 | return ( 22 |
23 | 变量名 24 | 29 | 变量类型 30 | 31 |
32 | ); 33 | }; 34 | 35 | export default TreeColumnHeader; 36 | -------------------------------------------------------------------------------- /src/types/enums/plugin.ts: -------------------------------------------------------------------------------- 1 | // 发布范围,Space 空间;Tenant 租户全局;Global 系统全局。目前UI上的"全局"指的是租户全局,可用值:Space,Tenant,Global 2 | export enum PluginPublishScopeEnum { 3 | Space = 'Space', 4 | Tenant = 'Tenant', 5 | Global = 'Global', 6 | } 7 | 8 | // 插件类型,可用值:HTTP,CODE 9 | export enum PluginTypeEnum { 10 | HTTP = 'HTTP', 11 | CODE = 'CODE', 12 | } 13 | 14 | // 插件代码语言,可用值:Python,JavaScript 15 | export enum CodeLangEnum { 16 | Python = 'Python', 17 | JavaScript = 'JavaScript', 18 | JSON = 'JSON', 19 | Text = 'Text', 20 | } 21 | 22 | // 插件Code模式 23 | export enum PluginCodeModeEnum { 24 | // 元数据 25 | Metadata = 'Metadata', 26 | // 代码 27 | Code = 'Code', 28 | } 29 | 30 | // 卡片绑定样式,可用值:SINGLE,LIST 31 | export enum BindCardStyleEnum { 32 | // 单张卡片 33 | SINGLE = 'SINGLE', 34 | // 竖向列表 35 | LIST = 'LIST', 36 | } 37 | -------------------------------------------------------------------------------- /src/assets/svg/icon_star_fill.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/nav/workspace.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/ConfigOptionsHeader/index.tsx: -------------------------------------------------------------------------------- 1 | import type { ConfigOptionsHeaderProps } from '@/types/interfaces/space'; 2 | import classNames from 'classnames'; 3 | import React, { PropsWithChildren } from 'react'; 4 | import styles from './index.less'; 5 | 6 | const cx = classNames.bind(styles); 7 | 8 | /** 9 | * 智能体配置项header 10 | */ 11 | const ConfigOptionsHeader: React.FC< 12 | PropsWithChildren 13 | > = ({ children, title }) => { 14 | return ( 15 |
23 |

{title}

24 | {children} 25 |
26 | ); 27 | }; 28 | 29 | export default ConfigOptionsHeader; 30 | -------------------------------------------------------------------------------- /src/components/AgentSidebar/StatisticsInfo/index.tsx: -------------------------------------------------------------------------------- 1 | import SvgIcon from '@/components/base/SvgIcon'; 2 | import { StatisticsInfoProps } from '@/types/interfaces/agentTask'; 3 | import classNames from 'classnames'; 4 | import React from 'react'; 5 | import styles from './index.less'; 6 | 7 | const cx = classNames.bind(styles); 8 | 9 | // 统计信息 10 | const StatisticsInfo: React.FC = ({ 11 | onClose, 12 | visible, 13 | }) => { 14 | return ( 15 |
16 | 24 |
25 | ); 26 | }; 27 | 28 | export default StatisticsInfo; 29 | -------------------------------------------------------------------------------- /src/pages/SpaceLibrary/CreateModel/IntranetModel/index.tsx: -------------------------------------------------------------------------------- 1 | import type { IntranetModelProps } from '@/types/interfaces/library'; 2 | import { Button } from 'antd'; 3 | import classNames from 'classnames'; 4 | import React from 'react'; 5 | import styles from './index.less'; 6 | 7 | const cx = classNames.bind(styles); 8 | 9 | /** 10 | * 内网模型 11 | */ 12 | const IntranetModel: React.FC = ({ onOpen }) => { 13 | return ( 14 |
15 |

16 | 选择“内网模型”可以把你局域网内的模型通过配置暴露给平台使用,你只需要在内网服务器执行一行命令,即可在下面的接口配置URL中配置你的内网地址 17 |

18 | 19 | 当前状态为离线 20 | 21 |
22 | ); 23 | }; 24 | 25 | export default IntranetModel; 26 | -------------------------------------------------------------------------------- /src/utils/debounce.ts: -------------------------------------------------------------------------------- 1 | // debounce 2 | export const debounce = ( 3 | fn: (...args: T) => void, 4 | delay = 2000, 5 | ) => { 6 | let timer: NodeJS.Timeout | null = null; 7 | return (...args: T) => { 8 | // 使用箭头函数 9 | if (timer) { 10 | clearTimeout(timer); 11 | } 12 | timer = setTimeout(() => { 13 | fn(...args); // 箭头函数中不需要 apply 14 | timer = null; 15 | }, delay); 16 | }; 17 | }; 18 | 19 | // throttle 20 | export const throttle = ( 21 | fn: (...args: T) => void, 22 | delay = 2000, 23 | ) => { 24 | let timer: NodeJS.Timeout | null = null; 25 | return (...args: T) => { 26 | // 使用箭头函数 27 | if (timer) return; 28 | timer = setTimeout(() => { 29 | fn(...args); // 箭头函数中不需要 apply 30 | timer = null; 31 | }, delay); 32 | }; 33 | }; 34 | -------------------------------------------------------------------------------- /src/components/UploadAvatar/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .file-box { 5 | display: flex; 6 | justify-content: center; 7 | align-items: center; 8 | width: 64px; 9 | height: 64px; 10 | border-radius: 10px; 11 | background-color: @colorFillTertiary; 12 | 13 | &:hover { 14 | .mask { 15 | opacity: 1; 16 | z-index: 1; 17 | } 18 | } 19 | 20 | .mask { 21 | position: absolute; 22 | top: 0; 23 | left: 0; 24 | right: 0; 25 | bottom: 0; 26 | background-color: rgba(22, 22, 26, 30%); 27 | color: @WHITE; 28 | font-size: 20px; 29 | transition: opacity 0.3s, z-index 0.2s; 30 | z-index: -1; 31 | opacity: 0; 32 | } 33 | 34 | .image { 35 | width: auto; 36 | height: 100%; 37 | object-fit: contain; 38 | max-width: 100%; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/pages/Login/SiteProtocol/index.tsx: -------------------------------------------------------------------------------- 1 | import classNames from 'classnames'; 2 | import React from 'react'; 3 | import styles from './index.less'; 4 | 5 | const cx = classNames.bind(styles); 6 | 7 | const SiteProtocol: React.FC = () => { 8 | return ( 9 | <> 10 | 已阅读并同意协议: 11 | 17 | 服务使用协议 18 | 19 | 20 | 26 | 隐私协议 27 | 28 | 29 | ); 30 | }; 31 | 32 | export default SiteProtocol; 33 | -------------------------------------------------------------------------------- /src/layouts/Setting/SettingAccount/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 24px; 6 | 7 | h3 { 8 | margin-bottom: 30px; 9 | font-size: 22px; 10 | font-weight: @fontWeightStrong; 11 | color: @BLANK04; 12 | } 13 | 14 | .avatar { 15 | width: 70px; 16 | height: 70px; 17 | margin-bottom: 60px; 18 | border-radius: 50%; 19 | } 20 | 21 | .input { 22 | width: 240px; 23 | margin-right: 30px; 24 | } 25 | 26 | .name { 27 | margin-bottom: 12px; 28 | font-size: 14px; 29 | font-weight: @fontWeightStrong; 30 | color: @BLANK04; 31 | } 32 | 33 | .text { 34 | font-size: 14px; 35 | line-height: 22px; 36 | color: #3d3d3d; 37 | 38 | &.phone { 39 | display: inline-block; 40 | margin-bottom: 40px; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/components/ChatInputHome/ManualComponentItem/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .manual-container { 5 | gap: @marginXs; 6 | width: 100%; 7 | 8 | .manual-box { 9 | padding: @paddingXxs @paddingXs; 10 | border-radius: @borderRadius; 11 | box-sizing: border-box; 12 | color: @colorTextSecondary; 13 | font-size: @fontSizeSm; 14 | transition: background-color ease-in-out 0.3s; 15 | word-wrap: normal; 16 | white-space: nowrap; 17 | border: @lineWidth solid @colorSplit; 18 | 19 | .svg-icon { 20 | color: @colorTextSecondary; 21 | } 22 | 23 | &:hover { 24 | background-color: @colorPrimaryBg; 25 | } 26 | 27 | &.active { 28 | color: @colorPrimary; 29 | font-weight: @fontWeightStrong; 30 | background-color: @colorPrimaryBg; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/layouts/Message/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .container { 4 | position: absolute; 5 | left: 70px !important; 6 | 7 | .segment { 8 | width: 50%; 9 | } 10 | 11 | .del-disabled { 12 | color: @GRAY04; 13 | } 14 | } 15 | 16 | .message-list { 17 | width: 500px; 18 | height: 500px; 19 | 20 | :global { 21 | .ds-markdown { 22 | --ds-font-size-m: 12px; 23 | --ds-font-size-xsp: 11px; 24 | --ds-line-height-m: 22px; 25 | // --ds-transition-duration: 0.2s; 26 | // --ds-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); 27 | // --ds-rgba-transparent: 255 255 255 / 0; 28 | // --ds-rgb-link: var(--ds-rgb-primary); 29 | // --ds-input-height-l: 44px; 30 | // --ds-input-height-m: 34px; 31 | // --ds-input-height-s: 30px; 32 | // --ds-input-height-xs: 26px; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/models/applicationDev.ts: -------------------------------------------------------------------------------- 1 | import { AgentConfigInfo } from '@/types/interfaces/agent'; 2 | import cloneDeep from 'lodash/cloneDeep'; 3 | import { useCallback, useRef, useState } from 'react'; 4 | 5 | export default () => { 6 | // 智能体列表 7 | const [agentList, setAgentList] = useState([]); 8 | // 所有智能体列表 9 | const agentAllRef = useRef([]); 10 | 11 | // 收藏与取消收藏 12 | const handlerCollect = useCallback( 13 | (index: number, isCollect: boolean) => { 14 | const _agentList = cloneDeep(agentList); 15 | _agentList[index].devCollected = isCollect; 16 | setAgentList(_agentList); 17 | agentAllRef.current[index].devCollected = isCollect; 18 | }, 19 | [agentList], 20 | ); 21 | 22 | return { 23 | agentList, 24 | setAgentList, 25 | agentAllRef, 26 | handlerCollect, 27 | }; 28 | }; 29 | -------------------------------------------------------------------------------- /src/pages/SpaceDevelop/AnalyzeStatistics/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .analyze-wrapper { 4 | position: relative; 5 | gap: 20px; 6 | 7 | .analyze-box { 8 | width: calc(50% - 10px); 9 | 10 | span { 11 | line-height: 50px; 12 | padding-left: 16px; 13 | font-size: 14px; 14 | color: @GRAY05; 15 | } 16 | 17 | div { 18 | height: 80px; 19 | font-size: 24px; 20 | color: @BLANK04; 21 | } 22 | } 23 | 24 | .row-line { 25 | position: absolute; 26 | top: 140px; 27 | left: 5px; 28 | width: calc(100% - 10px); 29 | height: 1px; 30 | background-color: @GRAY06; 31 | } 32 | 33 | .vertical-line { 34 | position: absolute; 35 | left: calc(50%); 36 | top: 5px; 37 | width: 1px; 38 | height: calc(100% - 10px); 39 | background-color: @GRAY06; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/layouts/MenusLayout/User/UserAction/index.tsx: -------------------------------------------------------------------------------- 1 | import type { UserActionItemType } from '@/types/interfaces/layouts'; 2 | import classNames from 'classnames'; 3 | import React from 'react'; 4 | import styles from './index.less'; 5 | 6 | const cx = classNames.bind(styles); 7 | 8 | /** 9 | * 用户操作选项 10 | */ 11 | const UserActionItem: React.FC = ({ 12 | className, 13 | onClick, 14 | type, 15 | icon, 16 | text, 17 | }) => { 18 | return ( 19 |
onClick(type)} 29 | > 30 | {icon} 31 | {text} 32 |
33 | ); 34 | }; 35 | 36 | export default UserActionItem; 37 | -------------------------------------------------------------------------------- /src/components/MoveCopyComponent/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .modal-container { 5 | width: 475px; 6 | height: 60%; 7 | overflow: hidden; 8 | 9 | .modal-body { 10 | max-height: calc(100vh - 180px); 11 | overflow-y: auto; 12 | } 13 | } 14 | 15 | .header { 16 | width: 330px; 17 | } 18 | 19 | .row-line { 20 | height: 2px; 21 | margin: 20px 0; 22 | background-color: @GRAY04; 23 | } 24 | 25 | .label { 26 | display: inline-block; 27 | font-weight: @fontWeightStrong; 28 | } 29 | 30 | .box { 31 | height: 40px; 32 | margin: 5px 0 16px; 33 | padding: 0 10px; 34 | gap: 10px; 35 | border-radius: 6px; 36 | background-color: @WHITE08; 37 | 38 | .img { 39 | width: 20px; 40 | height: 20px; 41 | border-radius: 50%; 42 | } 43 | 44 | .selected-ico { 45 | color: @GRAY07; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/pages/SpaceKnowledge/DocWrap/DocItem/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .file-info { 4 | height: 40px; 5 | padding: 0 10px; 6 | gap: 6px; 7 | margin-bottom: 4px; 8 | color: @BLANK04; 9 | font-size: 14px; 10 | transition: background-color 0.3s; 11 | cursor: default; 12 | 13 | &:hover { 14 | background-color: @GRAY01; 15 | } 16 | 17 | &:last-child { 18 | margin-bottom: 0; 19 | } 20 | 21 | &.active { 22 | background-color: @GRAY01; 23 | } 24 | 25 | .analyzing { 26 | color: @WHITE03; 27 | font-size: 12px; 28 | display: inline-block; 29 | padding: 4px 6px; 30 | background-color: @YELLOW01; 31 | border-radius: 4px; 32 | transform: scale(0.95); 33 | 34 | &.analyzing-success { 35 | background-color: @GREEN; 36 | } 37 | } 38 | 39 | .retry-btn { 40 | font-size: 12px; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/pages/EditAgent/SystemTipsWord/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: @paddingXs @padding; 6 | border-left: @lineWidth solid @colorSplit; 7 | width: 50%; 8 | //隐藏滚动条 9 | &::-webkit-scrollbar { 10 | display: none; 11 | } 12 | } 13 | 14 | .system-tips-wrapper { 15 | padding: @paddingXs; 16 | } 17 | 18 | .system-tips { 19 | font-size: @fontSize; 20 | line-height: @lineHeight; 21 | color: @colorTextSecondary; 22 | } 23 | 24 | .optimize-btn { 25 | color: @colorText; /* 修改文本颜色 */ 26 | padding: 6px @paddingSm; 27 | line-height: 16px; 28 | height: 16px; 29 | box-sizing: content-box; 30 | font-size: @fontSize; 31 | gap: @paddingXxs; 32 | } 33 | 34 | .text-area { 35 | padding-left: 0; 36 | padding-right: 0; 37 | //隐藏滚动条 38 | &::-webkit-scrollbar { 39 | display: none; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/assets/icons/design/overline.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | 15 | -------------------------------------------------------------------------------- /src/components/base/AgentType/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/token.less'; 2 | 3 | .container { 4 | height: 24px; 5 | padding: 0 8px; 6 | border-radius: 4px; 7 | gap: 4px; 8 | font-size: @fontSizeSm; 9 | font-weight: @fontWeightStrong; 10 | 11 | &.agent { 12 | color: #a84a00; 13 | background-color: #fff8ea; 14 | } 15 | 16 | &.plugin { 17 | color: #a84a00; 18 | background-color: #fff8ea; 19 | } 20 | 21 | &.workflow { 22 | color: #25772f; 23 | background-color: #ecf7ec; 24 | } 25 | 26 | &.knowledge { 27 | color: #b2140c; 28 | background-color: #fef2ed; 29 | } 30 | 31 | &.table { 32 | color: #004fb3; 33 | background-color: #eaf5ff; 34 | } 35 | 36 | &.model { 37 | color: #871e9e; 38 | background-color: #f7e9f7; 39 | } 40 | 41 | &.page { 42 | color: #ad0e05; 43 | background-color: #fff2ed; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/components/base/McpStatus/images/icon_initialization.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/components/base/SecondMenuItem/SubItem.tsx: -------------------------------------------------------------------------------- 1 | import classNames from 'classnames'; 2 | import React from 'react'; 3 | import MenuListItem from '../MenuListItem'; 4 | import styles from './index.less'; 5 | 6 | const cx = classNames.bind(styles); 7 | 8 | // 二级菜单项下级组件 9 | interface SubItemProps { 10 | icon?: React.ReactNode | string; 11 | isFirst?: boolean; 12 | name: string; 13 | isActive?: boolean; 14 | onClick: () => void; 15 | } 16 | 17 | // 二级菜单项下级组件 18 | const SubItem: React.FC = ({ 19 | icon, 20 | name, 21 | isActive = false, 22 | isFirst = false, 23 | onClick, 24 | }) => { 25 | return ( 26 | 34 | ); 35 | }; 36 | 37 | export default SubItem; 38 | -------------------------------------------------------------------------------- /src/components/ParamsNameLabel/index.tsx: -------------------------------------------------------------------------------- 1 | import ConditionRender from '@/components/ConditionRender'; 2 | import type { ParamsNameLabelProps } from '@/types/interfaces/common'; 3 | import classNames from 'classnames'; 4 | import React from 'react'; 5 | import styles from './index.less'; 6 | 7 | const cx = classNames.bind(styles); 8 | 9 | /** 10 | * 试运行表格 - 参数名称label 11 | */ 12 | const ParamsNameLabel: React.FC = ({ 13 | require, 14 | paramName, 15 | paramType, 16 | }) => { 17 | return ( 18 |
19 | {paramName} 20 | 21 | * 22 | 23 | {paramType} 24 |
25 | ); 26 | }; 27 | 28 | export default ParamsNameLabel; 29 | -------------------------------------------------------------------------------- /src/assets/icons/design/tabular_numbers.svg: -------------------------------------------------------------------------------- 1 | 7 | 11 | -------------------------------------------------------------------------------- /src/components/base/index.ts: -------------------------------------------------------------------------------- 1 | // 基础组件统一导出 2 | export { default as ActionMenu } from './ActionMenu'; 3 | export type { ActionItem, ActionMenuProps } from './ActionMenu'; 4 | 5 | export { default as AgentType } from './AgentType'; 6 | export { default as AuthorInfo } from './AuthorInfo'; 7 | export { default as CopyButton } from './CopyButton'; 8 | export { default as CopyIconButton } from './CopyIconButton'; 9 | export { default as EcoShareStatus } from './EcoShareStatus'; 10 | export { default as HoverScrollbar } from './HoverScrollbar'; 11 | export { default as McpInstallType } from './McpInstallType'; 12 | export { default as McpStatus } from './McpStatus'; 13 | export { default as MenuListItem } from './MenuListItem'; 14 | export { default as SecondMenuItem } from './SecondMenuItem'; 15 | export { default as SvgIcon } from './SvgIcon'; 16 | export { default as SvgIconGoodTheme } from './SvgIconGoodTheme'; 17 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/ComponentSettingModal/AsyncRun/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 50px 24px 24px; 6 | font-size: 14px; 7 | background-color: @WHITE04; 8 | 9 | .header { 10 | margin-bottom: 4px; 11 | color: @BLANK11; 12 | font-weight: @fontWeightStrong; 13 | } 14 | 15 | .desc { 16 | color: @BLANK13; 17 | } 18 | 19 | .reply-content { 20 | margin: 12px 0; 21 | color: @BLANK11; 22 | font-weight: @fontWeightStrong; 23 | 24 | .textarea { 25 | color: rgba(56, 55, 67, 100%); 26 | } 27 | } 28 | 29 | .tips { 30 | color: @RED01; 31 | font-size: 12px; 32 | } 33 | 34 | .footer { 35 | text-align: right; 36 | 37 | .btn-disabled { 38 | border-color: transparent; 39 | color: @WHITE; 40 | background: @BLUE12; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/styles/teamSetting.less: -------------------------------------------------------------------------------- 1 | .team-setting-container { 2 | width: 100%; 3 | height: 100%; 4 | padding: 26px 26px 21px 22px; 5 | background-color: #f3f5fa; 6 | } 7 | 8 | .team-summary-info { 9 | margin-bottom: 15px; 10 | 11 | img { 12 | width: 50px; 13 | height: 50px; 14 | border-radius: 10px; 15 | margin-right: 15px; 16 | } 17 | 18 | h1 { 19 | margin-bottom: 10px; 20 | } 21 | } 22 | 23 | .team-setting-modal-description { 24 | margin: 25px 0; 25 | } 26 | 27 | .team-setting-modal-warning { 28 | color: red; 29 | background-color: #f6f4dd; 30 | text-align: center; 31 | padding: 10px 0; 32 | border-radius: 10px; 33 | } 34 | 35 | .add-member-modal-content { 36 | width: 600px; 37 | } 38 | 39 | .add-member-left-column { 40 | padding-right: 15px; 41 | border-right: 1px solid #ddd; 42 | } 43 | 44 | .selected-member-list { 45 | border-bottom: none; 46 | } 47 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/OpenRemarksEdit/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .header-title { 4 | margin-bottom: 8px; 5 | color: @BLANK13; 6 | font-size: 12px; 7 | } 8 | 9 | .title-box { 10 | height: 26px; 11 | margin-top: 10px; 12 | margin-bottom: 4px; 13 | 14 | .title { 15 | color: @BLANK13; 16 | font-size: 12px; 17 | } 18 | } 19 | 20 | .content-box { 21 | border-radius: 4px; 22 | 23 | .custom-style-editor { 24 | border-width: 0.5px; 25 | min-height: 200px; 26 | max-height: 400px; 27 | } 28 | } 29 | 30 | .input { 31 | margin-bottom: 10px; 32 | 33 | &:last-child { 34 | margin-bottom: 0; 35 | } 36 | } 37 | 38 | .icon-input-prefix { 39 | width: 16px; 40 | height: 16px; 41 | object-fit: cover; 42 | border-radius: 4px; 43 | overflow: hidden; 44 | } 45 | 46 | .icon-input-suffix { 47 | margin-inline-end: 0 !important; 48 | } 49 | -------------------------------------------------------------------------------- /src/assets/icons/chat/network.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/TiptapVariableInput/hooks/useMentionItems.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * useMentionItems Hook 3 | * Mentions 数据管理 Hook 4 | */ 5 | 6 | import { useMemo } from 'react'; 7 | import type { MentionItem } from '../types'; 8 | 9 | /** 10 | * Mentions 数据管理 Hook 11 | * @param mentions Mentions 数据列表 12 | * @param query 搜索查询文本 13 | * @returns 过滤后的 Mentions 列表 14 | */ 15 | export const useMentionItems = ( 16 | mentions: MentionItem[] = [], 17 | query: string = '', 18 | ): MentionItem[] => { 19 | return useMemo(() => { 20 | if (!query.trim()) { 21 | return mentions; 22 | } 23 | 24 | const queryLower = query.toLowerCase(); 25 | return mentions.filter((item) => { 26 | const labelLower = item.label.toLowerCase(); 27 | const idLower = item.id.toLowerCase(); 28 | return labelLower.includes(queryLower) || idLower.includes(queryLower); 29 | }); 30 | }, [mentions, query]); 31 | }; 32 | -------------------------------------------------------------------------------- /src/pages/EditAgent/AgentArrangeConfig/ComponentSettingModal/ExceptionHanding/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 50px 24px 24px; 6 | font-size: 14px; 7 | background-color: @WHITE04; 8 | 9 | .header { 10 | margin-bottom: 4px; 11 | color: @BLANK11; 12 | font-weight: @fontWeightStrong; 13 | } 14 | 15 | .desc { 16 | color: @BLANK13; 17 | } 18 | 19 | .reply-content { 20 | margin: 12px 0; 21 | color: @BLANK11; 22 | font-weight: @fontWeightStrong; 23 | 24 | .textarea { 25 | color: rgba(56, 55, 67, 100%); 26 | } 27 | } 28 | 29 | .tips { 30 | color: @RED01; 31 | font-size: 12px; 32 | } 33 | 34 | .footer { 35 | text-align: right; 36 | 37 | .btn-disabled { 38 | border-color: transparent; 39 | color: @WHITE; 40 | background: @BLUE12; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/assets/icons/nav/ecosystem.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/pages/SpaceTable/TableHeader/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .database-header { 5 | height: 56px; 6 | //padding: 0 10px; 7 | gap: 12px; 8 | border-bottom: 1px solid @WHITE07; 9 | 10 | .icon-back { 11 | color: @BLANK17; 12 | font-size: 18px; 13 | } 14 | 15 | .logo { 16 | width: 27px; 17 | height: 27px; 18 | border-radius: 5px; 19 | object-fit: cover; 20 | } 21 | 22 | .database-header-title { 23 | gap: 6px; 24 | color: @BLANK04; 25 | 26 | .name { 27 | font-size: 14px; 28 | font-weight: @fontWeightStrong; 29 | } 30 | 31 | .tag-style { 32 | display: inline-block; 33 | padding: 0 5px; 34 | line-height: 18px; 35 | background-color: @BLANK18; 36 | color: @BLANK04; 37 | font-size: 10px; 38 | border-radius: 4px; 39 | //margin-top: 6px; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/assets/icons/design/reset.svg: -------------------------------------------------------------------------------- 1 | 7 | 13 | -------------------------------------------------------------------------------- /src/assets/icons/chat/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/pages/SpaceMcpEdit/McpEditItem/index.tsx: -------------------------------------------------------------------------------- 1 | import { McpEditItemProps } from '@/types/interfaces/mcp'; 2 | import { Button } from 'antd'; 3 | import classNames from 'classnames'; 4 | import React from 'react'; 5 | import styles from './index.less'; 6 | 7 | const cx = classNames.bind(styles); 8 | 9 | // MCP服务编辑试运行项 10 | const McpEditItem: React.FC = ({ 11 | name, 12 | description, 13 | onClick, 14 | }) => { 15 | return ( 16 |
17 |
18 |
{name}
19 | 22 |
23 |

{description}

24 |
25 | ); 26 | }; 27 | 28 | export default McpEditItem; 29 | -------------------------------------------------------------------------------- /src/components/LabelIcon/index.tsx: -------------------------------------------------------------------------------- 1 | import TooltipIcon from '@/components/custom/TooltipIcon'; 2 | import { TooltipTitleTypeEnum } from '@/types/enums/common'; 3 | import type { LabelIconProps } from '@/types/interfaces/agent'; 4 | import { InfoCircleOutlined } from '@ant-design/icons'; 5 | import classNames from 'classnames'; 6 | import React from 'react'; 7 | import styles from './index.less'; 8 | 9 | const cx = classNames.bind(styles); 10 | 11 | /** 12 | * 知识库设置label组件 13 | */ 14 | const LabelIcon: React.FC = ({ 15 | className, 16 | label, 17 | title, 18 | type = TooltipTitleTypeEnum.Blank, 19 | }) => { 20 | return ( 21 |
24 | {label} 25 | } type={type} /> 26 |
27 | ); 28 | }; 29 | 30 | export default LabelIcon; 31 | -------------------------------------------------------------------------------- /src/assets/svg/icon_message.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/pages/SpaceKnowledge/LocalCustomDocModal/CreateSet/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .set-box { 5 | min-height: 75px; 6 | margin-bottom: 10px; 7 | border-radius: 5px; 8 | background: @WHITE; 9 | border: 1px solid @WHITE14; 10 | transition: border-color 0.3s; 11 | 12 | &.mt-50 { 13 | margin-top: 50px; 14 | } 15 | 16 | &.active { 17 | background: @WHITE06; 18 | border-color: @BLUE02; 19 | } 20 | 21 | h3 { 22 | margin-bottom: 8px; 23 | font-size: 14px; 24 | font-weight: @fontWeightStrong; 25 | color: @BLANK17; 26 | } 27 | 28 | p { 29 | font-size: 12px; 30 | color: @GRAY11; 31 | } 32 | 33 | .custom-set-hide { 34 | display: none; 35 | } 36 | 37 | .divider-horizontal { 38 | height: 1px; 39 | margin: 10px 0; 40 | background-color: @GRAY01; 41 | } 42 | 43 | .mb-10 { 44 | margin-bottom: 10px; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/pages/SpaceKnowledge/RawSegmentInfo/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | 3 | .header { 4 | gap: 10px; 5 | height: 72px; 6 | padding: 0 30px; 7 | color: @BLANK11; 8 | font-size: 14px; 9 | border-bottom: 1px solid @GRAY01; 10 | 11 | .file-name { 12 | max-width: 60%; 13 | } 14 | 15 | .extra-box { 16 | margin-left: auto; 17 | 18 | .switch-name { 19 | margin-right: 10px; 20 | color: @GRAY05; 21 | } 22 | 23 | .del { 24 | margin-left: 30px; 25 | font-size: 18px; 26 | } 27 | } 28 | } 29 | 30 | .segment-box { 31 | color: @BLANK; 32 | font-size: 14px; 33 | } 34 | 35 | .line { 36 | line-height: 22px; 37 | padding: 8px 10px; 38 | margin-bottom: 8px; 39 | font-size: 14px; 40 | color: @BLANK11; 41 | border: 1px solid @BLANK01; 42 | background-color: @BLANK27; 43 | word-break: break-word; 44 | 45 | &:last-child { 46 | margin-bottom: 0; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/types/enums/menus.ts: -------------------------------------------------------------------------------- 1 | // 菜单栏~tabs切换事件枚举 2 | export enum TabsEnum { 3 | NewChat = 'new_chat', 4 | Home = 'home', 5 | // 工作空间 6 | Space = 'space', 7 | // 广场 8 | Square = 'square', 9 | // 系统管理 10 | System_Manage = 'system_manage', 11 | //课程体系 12 | Course_System = 'course_system', 13 | //生态市场 14 | Ecosystem_Market = 'ecosystem_market', 15 | } 16 | 17 | // 菜单栏,用户操作区域点击事件枚举 18 | export enum UserOperatorAreaEnum { 19 | Document = 'document', 20 | Message = 'message', 21 | } 22 | 23 | // 菜单栏~用户头像操作列表枚举 24 | export enum UserAvatarEnum { 25 | User_Name = 'username', 26 | Setting = 'setting', 27 | Log_Out = 'log_out', 28 | } 29 | 30 | // 消息状态,可用值:All, Unread, Read 31 | export enum MessageReadStatusEnum { 32 | All = 'All', 33 | Unread = 'Unread', 34 | Read = 'Read', 35 | } 36 | 37 | // 设置选项 38 | export enum SettingActionEnum { 39 | Account, 40 | Email_Bind, 41 | Reset_Password, 42 | Theme_Switch, 43 | } 44 | -------------------------------------------------------------------------------- /src/pages/SpaceMcpCreate/McpHeader/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color.less'; 2 | @import '@/styles/token'; 3 | 4 | .header { 5 | height: 56px; 6 | border-bottom: 1px solid @WHITE15; 7 | 8 | .icon { 9 | color: @GRAY10; 10 | font-size: 14px; 11 | margin-right: 4px; 12 | } 13 | 14 | .name { 15 | font-size: 16px; 16 | font-weight: normal; 17 | color: @BLANK04; 18 | } 19 | 20 | .extra-box { 21 | gap: 20px; 22 | 23 | .save-btn { 24 | background-color: @WHITE13; 25 | color: @BLUE05; 26 | border-color: @GRAY30; 27 | 28 | &:hover { 29 | background-color: @WHITE13; 30 | border-color: transparent; 31 | color: @BLUE05; 32 | opacity: 0.8; 33 | } 34 | } 35 | } 36 | } 37 | 38 | @media (max-width: 768px) { 39 | .header { 40 | width: 100%; 41 | overflow-x: auto; 42 | 43 | .extra-box { 44 | gap: 8px; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/components/base/AgentType/images/icon_workflow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/chat/copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/ToggleWrap/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | display: flex; 6 | width: 100%; 7 | max-width: 434px; 8 | min-width: 300px; 9 | transition: all 0.3s ease; 10 | border-left: @lineWidth solid @colorSplit; 11 | 12 | &.hidden { 13 | display: none; 14 | width: 0; 15 | overflow: hidden; 16 | } 17 | 18 | .header { 19 | height: 32px; 20 | padding: @paddingXs @paddingLg; 21 | box-sizing: content-box; 22 | border-bottom: @lineWidth solid @colorSplit; 23 | 24 | h3 { 25 | font-size: 16px; 26 | color: @colorText; 27 | white-space: nowrap; 28 | font-weight: 600; 29 | line-height: 24px; 30 | } 31 | 32 | .close { 33 | margin-left: @paddingXs; 34 | font-size: @fontSizeLg; 35 | transition: opacity ease-in-out 0.2s; 36 | 37 | &:hover { 38 | opacity: 0.8; 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/pages/EditAgent/PreviewAndDebug/PreviewAndDebugHeader/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | height: 32px; 6 | padding: @paddingXs @paddingLg; 7 | box-sizing: content-box; 8 | border-bottom: @lineWidth solid @colorSplit; 9 | 10 | h3 { 11 | font-size: 16px; 12 | //font-weight: @fontWeightStrong; 13 | font-weight: 600; 14 | line-height: 24px; 15 | color: @colorText; 16 | } 17 | 18 | .extra-box { 19 | gap: @marginXs; 20 | color: @colorText; 21 | 22 | .debug { 23 | border: none; 24 | padding: @paddingXs @paddingSm; 25 | font-size: 14px; 26 | line-height: 20px; 27 | font-weight: 400; 28 | height: 24px; 29 | color: @colorText; 30 | gap: @paddingXs; 31 | box-sizing: content-box; 32 | 33 | :global { 34 | .ant-btn-icon { 35 | height: 20px; 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/assets/icons/common/delete.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/common/download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/pages/SpacePluginTool/index.less: -------------------------------------------------------------------------------- 1 | @import '@/styles/color'; 2 | @import '@/styles/token'; 3 | 4 | .container { 5 | padding: 0 5px; 6 | 7 | .main-container { 8 | flex: 1; 9 | //padding: 16px 20px; 10 | padding: 10px; 11 | margin: 10px 0; 12 | 13 | .title { 14 | font-size: 18px; 15 | font-weight: @fontWeightStrong; 16 | color: @BLANK04; 17 | } 18 | 19 | .request-select { 20 | width: 98px; 21 | margin-right: 16px; 22 | } 23 | 24 | .table-wrap { 25 | border-radius: 5px; 26 | border: 1px solid @BLANK19; 27 | 28 | &.mb-24 { 29 | margin-bottom: 24px; 30 | } 31 | 32 | :global { 33 | .ant-table-tbody > tr > td { 34 | border-bottom: none; 35 | } 36 | } 37 | } 38 | 39 | .select { 40 | width: 120px; 41 | } 42 | } 43 | } 44 | 45 | @media (max-width: 768px) { 46 | .container { 47 | min-width: 900px; 48 | } 49 | } 50 | --------------------------------------------------------------------------------