├── .env.template ├── .gitignore ├── LICENSE ├── README.md ├── api ├── agent │ ├── __init__.py │ └── agent.py ├── apps │ ├── __init__.py │ ├── app_api.py │ └── apps.py ├── auth │ ├── __init__.py │ ├── auth.py │ └── token.py ├── chatroom │ ├── __init__.py │ └── chatroom.py ├── icon │ ├── __init__.py │ └── icon.py ├── index │ ├── __init__.py │ └── index.py ├── llm │ ├── __init__.py │ └── llm.py ├── mcp_servers │ ├── __init__.py │ └── server.py ├── prompt_editor │ ├── __init__.py │ └── router.py ├── schema │ ├── agent.py │ ├── apps.py │ ├── base.py │ ├── chat.py │ ├── index.py │ ├── mcp_servers.py │ ├── node.py │ ├── skill.py │ ├── supplier.py │ ├── tags.py │ ├── tools.py │ ├── user.py │ ├── vector.py │ ├── workflows.py │ └── workspace.py ├── skill │ ├── __init__.py │ └── skill.py ├── supplier │ ├── __init__.py │ └── supplier.py ├── tags │ ├── __init__.py │ └── tags.py ├── tools │ ├── __init__.py │ └── tools.py ├── upload │ ├── __init__.py │ └── upload.py ├── utils │ ├── __init__.py │ ├── auth.py │ ├── common.py │ ├── connection.py │ └── jwt.py ├── vector │ ├── __init__.py │ └── vector.py ├── workflow │ ├── __init__.py │ ├── node.py │ └── workflow.py └── workspace │ ├── __init__.py │ └── workspace.py ├── app.py ├── assets └── tool │ ├── code.svg │ ├── duckduckgo.svg │ ├── maths.svg │ ├── stability.svg │ └── webscraper.svg ├── celery_app.py ├── conda └── nexus_ai.yml ├── config.py ├── core ├── auth │ └── __init__.py ├── chatroom │ ├── __init__.py │ ├── chatroom.py │ ├── chatroom_manager.py │ └── websocket.py ├── database │ ├── __init__.py │ ├── models │ │ ├── __init__.py │ │ ├── agent_abilities.py │ │ ├── agent_callable_items.py │ │ ├── agent_chat_messages.py │ │ ├── agent_dataset_relation.py │ │ ├── agents.py │ │ ├── ai_tool_llm_records.py │ │ ├── app_node_executions.py │ │ ├── app_node_user_relation.py │ │ ├── app_runs.py │ │ ├── app_workflow_relation.py │ │ ├── apps.py │ │ ├── chatroom_agent_relation.py │ │ ├── chatroom_driven_records.py │ │ ├── chatroom_messages.py │ │ ├── chatrooms.py │ │ ├── custom_tools.py │ │ ├── dataset_process_rules.py │ │ ├── datasets.py │ │ ├── document_segment_rag_records.py │ │ ├── document_segments.py │ │ ├── documents.py │ │ ├── mcp_server.py │ │ ├── mcp_servers.py │ │ ├── model_configurations.py │ │ ├── models.py │ │ ├── rag_records.py │ │ ├── supplier_configurations.py │ │ ├── suppliers.py │ │ ├── tag_bindings.py │ │ ├── tags.py │ │ ├── teams.py │ │ ├── tool_authorizations.py │ │ ├── upload_files.py │ │ ├── users.py │ │ ├── workflows.py │ │ └── workspaces.py │ ├── mysql.py │ ├── orm.py │ └── sql_database.py ├── dataset │ ├── __init__.py │ ├── dataset.py │ └── gpt2 │ │ ├── merges.txt │ │ ├── special_tokens_map.json │ │ ├── tokenizer_config.json │ │ └── vocab.json ├── document │ ├── __init__.py │ ├── document_loader.py │ └── text_splitter.py ├── embeddings │ ├── __init__.py │ ├── baichuan.py │ ├── embeddings.py │ ├── openai.py │ └── text2vec.py ├── file │ └── __init__.py ├── helper │ └── __init__.py ├── image_generation │ ├── __init__.py │ └── models.py ├── llm │ ├── __init__.py │ ├── messages.py │ ├── models.py │ ├── output_schemas.py │ └── prompt.py ├── mcp │ └── client.py ├── memory │ └── __init__.py ├── reranker │ ├── __init__.py │ ├── cross_encoder_rerank.py │ └── reranker.py ├── retriever │ ├── __init__.py │ └── retriever.py ├── tool │ ├── errors.py │ ├── provider │ │ ├── builtin │ │ │ ├── code │ │ │ │ ├── code.py │ │ │ │ ├── code.yaml │ │ │ │ └── tool │ │ │ │ │ ├── simple_code.py │ │ │ │ │ └── simple_code.yaml │ │ │ ├── duckduckgo │ │ │ │ ├── duckduckgo.py │ │ │ │ ├── duckduckgo.yaml │ │ │ │ └── tool │ │ │ │ │ ├── ddgo_search.py │ │ │ │ │ └── ddgo_search.yaml │ │ │ ├── maths │ │ │ │ ├── maths.py │ │ │ │ ├── maths.yaml │ │ │ │ └── tool │ │ │ │ │ ├── eval_expression.py │ │ │ │ │ └── eval_expression.yaml │ │ │ ├── stability │ │ │ │ ├── stability.py │ │ │ │ ├── stability.yaml │ │ │ │ └── tool │ │ │ │ │ ├── base.py │ │ │ │ │ ├── text2image.py │ │ │ │ │ └── text2image.yaml │ │ │ └── webscraper │ │ │ │ ├── tool │ │ │ │ ├── webscraper.py │ │ │ │ └── webscraper.yaml │ │ │ │ ├── webscraper.py │ │ │ │ └── webscraper.yaml │ │ └── builtin_tool_provider.py │ └── utils │ │ └── yaml_utils.py ├── vdb │ ├── __init__.py │ ├── milvus.py │ └── vector_database.py ├── websocket │ ├── websocket_manager.py │ └── websocket_queue_pop.py └── workflow │ ├── __init__.py │ ├── context.py │ ├── edges.py │ ├── graph.py │ ├── nodes │ ├── __init__.py │ ├── agent.py │ ├── base │ │ ├── __init__.py │ │ ├── base.py │ │ ├── import_to_kb_base.py │ │ ├── llm_base.py │ │ └── sandbox_base.py │ ├── condition_branch.py │ ├── constant_variable.py │ ├── custom_code.py │ ├── end.py │ ├── http_request.py │ ├── human.py │ ├── llm.py │ ├── memory_interrupt.py │ ├── recursive_task_execution.py │ ├── recursive_task_generation.py │ ├── recursive_task_merge.py │ ├── requirement_category.py │ ├── retriever.py │ ├── skill.py │ ├── start.py │ ├── template_conversion.py │ ├── tool.py │ └── variable_aggregation.py │ ├── recursive_task.py │ └── variables.py ├── docker ├── __init__.py ├── docker-compose.yml.template ├── multi_service │ ├── Dockerfile │ ├── db_migrations │ │ ├── 20241220.sql │ │ ├── 20241224.sql │ │ ├── 20241225-1.sql │ │ ├── 20241225.sql │ │ ├── 202412251711.sql │ │ ├── 20250103.sql │ │ ├── 202501031448.sql │ │ ├── 202501031711.sql │ │ ├── 20250105.sql │ │ ├── 20250106.sql │ │ ├── 20250108.sql │ │ ├── 20250109.sql │ │ ├── 20250112.sql │ │ ├── 20250113.sql │ │ ├── 20250115.sql │ │ ├── 20250116.sql │ │ ├── 20250119.sql │ │ ├── 20250120.sql │ │ ├── 20250122.sql │ │ ├── 20250207.sql │ │ ├── 202502081348.sql │ │ ├── 202502181526.sql │ │ ├── 202502191812.sql │ │ ├── 202502201338.sql │ │ ├── 20250221.sql │ │ ├── 202502240943.sql │ │ ├── 202502271415.sql │ │ ├── 202503041538.sql │ │ ├── 202503041630.sql │ │ ├── 202503111704.sql │ │ ├── 202503131003.sql │ │ ├── 202503131127.sql │ │ ├── 202503271631.sql │ │ ├── 202504101823.sql │ │ ├── 202504141632.sql │ │ ├── 202504150953.sql │ │ ├── 202504251614.sql │ │ ├── 202504271101.sql │ │ ├── 202504291300.sql │ │ ├── 202505071501.sql │ │ ├── 202505080957.sql │ │ ├── 202505291353.sql │ │ └── 202506051355.sql │ ├── import_documents_to_vdb.py │ ├── init_admin_password.py │ ├── migrations.py │ ├── supervisord.conf │ └── vdb_migrations │ │ └── 0.json ├── mysql │ └── db_init │ │ └── nexus_ai.sql ├── nginx │ ├── conf.d │ │ └── default.conf │ ├── http_proxy.conf │ └── websocket_proxy.conf ├── sandbox │ ├── Dockerfile │ └── api_server.py └── web │ └── Dockerfile ├── languages.py ├── log.py ├── scripts ├── file_tool.py ├── import_documents_to_vdb.py ├── init_admin_password.py ├── init_model_database.py ├── migrations.py └── mysql_tool.py ├── supervisord.conf.template ├── task ├── __init__.py ├── ai_tool_run.py ├── chatroom_run.py ├── mcp_server.py └── workflow_run.py ├── web ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .hintrc ├── .prettierignore ├── .prettierrc.js ├── config │ ├── config.ts │ ├── defaultSettings.ts │ ├── envConfig.ts.template │ ├── oneapi.json │ ├── proxy.ts │ └── routes.ts ├── dist │ ├── 10.136f713a.async.js │ ├── 140.1beabc9e.async.js │ ├── 246.ae7be8e4.async.js │ ├── 387.b8730ca5.async.js │ ├── 390.41467286.async.js │ ├── 393.f8bb848e.async.js │ ├── 409.8e8cdd8c.async.js │ ├── 439.b94dd220.async.js │ ├── 446.40f6eccc.async.js │ ├── 524.502cc024.async.js │ ├── 592.f4c0c9a6.async.js │ ├── 615.8d56d208.async.js │ ├── 79.00d3f302.async.js │ ├── 904.40be5fd3.async.js │ ├── 905.8dd24278.async.js │ ├── 91.53cd5c88.async.js │ ├── CNAME │ ├── favicon.ico │ ├── icons │ │ ├── add_blue.svg │ │ ├── add_white.svg │ │ ├── age222nt_1.svg │ │ ├── agent.svg │ │ ├── agent_create.svg │ │ ├── agent_skill.svg │ │ ├── agents_create.svg │ │ ├── arrow-clockwise.svg │ │ ├── arrow-counterclockwise.svg │ │ ├── back_log.svg │ │ ├── chat_copy.svg │ │ ├── chat_copy_check.svg │ │ ├── chat_copy_w.svg │ │ ├── chat_room.svg │ │ ├── condition_branch.svg │ │ ├── creation │ │ │ ├── add.svg │ │ │ ├── agent.svg │ │ │ ├── chat_room.svg │ │ │ ├── gongzuoliu1.svg │ │ │ ├── gongzuoliu2.svg │ │ │ ├── jienng1.svg │ │ │ ├── pitchagent.svg │ │ │ ├── pitchgongzuoliu.svg │ │ │ ├── pitchquanbu.svg │ │ │ ├── pitchskill.svg │ │ │ ├── pitchzhishik.svg │ │ │ ├── quanbu.svg │ │ │ ├── signgongzuoliu.svg │ │ │ ├── signskill.svg │ │ │ ├── signzhishik.svg │ │ │ ├── unselectedprocess.svg │ │ │ ├── unselectedrepository.svg │ │ │ ├── unselectedrobot.svg │ │ │ ├── unselectedskill.svg │ │ │ └── zhishik1.svg │ │ ├── custom_code.svg │ │ ├── default.svg │ │ ├── delete.svg │ │ ├── delete_icon.svg │ │ ├── edit_icon.svg │ │ ├── edit_icon_1.svg │ │ ├── end.svg │ │ ├── flag.svg │ │ ├── fs.svg │ │ ├── gandUp.svg │ │ ├── headportrait │ │ │ ├── Android.svg │ │ │ ├── SQL.svg │ │ │ ├── Viewprocess.svg │ │ │ ├── aircraft.svg │ │ │ ├── consultingfee.svg │ │ │ ├── leaf.svg │ │ │ ├── mainprocess.svg │ │ │ ├── map.svg │ │ │ ├── python.svg │ │ │ ├── science.svg │ │ │ ├── subprocess.svg │ │ │ └── travel.svg │ │ ├── http_icon.svg │ │ ├── http_request.svg │ │ ├── human.svg │ │ ├── journal-text.svg │ │ ├── json.svg │ │ ├── justify.svg │ │ ├── kb_setting.svg │ │ ├── kb_setting_select.svg │ │ ├── knowledge_base.svg │ │ ├── lang.svg │ │ ├── llm.svg │ │ ├── local.svg │ │ ├── local_select.svg │ │ ├── logo.svg │ │ ├── manual_confirmation.svg │ │ ├── md.svg │ │ ├── more.svg │ │ ├── number.svg │ │ ├── online.svg │ │ ├── online_select.svg │ │ ├── operation_disable_icon.svg │ │ ├── operation_icon.svg │ │ ├── pdf.svg │ │ ├── play_disable_icon.svg │ │ ├── play_icon.svg │ │ ├── plaza_add.svg │ │ ├── plaza_m1_c1.svg │ │ ├── plaza_m1_c2.svg │ │ ├── plaza_m2_c1.svg │ │ ├── plaza_m2_c2.svg │ │ ├── plaza_view.svg │ │ ├── recall_test.svg │ │ ├── recall_test_select.svg │ │ ├── recently_active.svg │ │ ├── recursive_task_execution.svg │ │ ├── recursive_task_generation.svg │ │ ├── requirement_category.svg │ │ ├── retriever.svg │ │ ├── return.svg │ │ ├── robot_icon.svg │ │ ├── search_icon.svg │ │ ├── send_icon_w.svg │ │ ├── skill.svg │ │ ├── start.svg │ │ ├── start_icon.svg │ │ ├── tag.svg │ │ ├── template_conversion.svg │ │ ├── text-center.svg │ │ ├── text-left.svg │ │ ├── text-paragraph.svg │ │ ├── text-right.svg │ │ ├── text.svg │ │ ├── textIcon.svg │ │ ├── tool.svg │ │ ├── txt.svg │ │ ├── type-bold.svg │ │ ├── type-italic.svg │ │ ├── type-strikethrough.svg │ │ ├── type-underline.svg │ │ ├── unpublish.svg │ │ ├── uptxt.svg │ │ ├── uptxt_select.svg │ │ ├── user_header.svg │ │ ├── variable_aggregation.svg │ │ ├── word.svg │ │ ├── workflow_icon.svg │ │ ├── workflows.svg │ │ ├── xlsx.svg │ │ ├── zh.svg │ │ └── zishu.svg │ ├── images │ │ ├── arrow.svg │ │ ├── bg.png │ │ ├── creation.svg │ │ ├── creation_active.svg │ │ ├── empty.svg │ │ ├── home.svg │ │ ├── home_active.svg │ │ ├── logo.svg │ │ ├── workflow.svg │ │ └── workflow_active.svg │ ├── index.html │ ├── logo.svg │ ├── p__404.b23b9363.async.js │ ├── p__Createkb__index.816b694f.async.js │ ├── p__Createkb__index.f9a23819.chunk.css │ ├── p__Creation__Agents__index.d8438a9c.async.js │ ├── p__Creation__Skill__index.101fdd4b.async.js │ ├── p__Creation__index.18bd840b.chunk.css │ ├── p__Creation__index.45ee5d77.async.js │ ├── p__Plaza__ChatRoom__index.5b770993.chunk.css │ ├── p__Plaza__ChatRoom__index.a0f19ed0.async.js │ ├── p__Plaza__Dash_board__index.18bd840b.chunk.css │ ├── p__Plaza__Dash_board__index.7194e571.async.js │ ├── p__Plaza__Meeting__index.786eb3f1.async.js │ ├── p__ReadOnly__Agent__index.bf81e500.async.js │ ├── p__ReadOnly__Skill__index.4655a2d6.async.js │ ├── p__User__Login__index.aa25fbfe.async.js │ ├── p__User__Register__index.99a3d94d.async.js │ ├── p__WorkSpace__Log__index.485cfcdd.async.js │ ├── p__WorkSpace__WorkFlow__index.4afa4e00.chunk.css │ ├── p__WorkSpace__WorkFlow__index.57ca27c4.async.js │ ├── p__WorkSpace__index.01edf73a.async.js │ ├── p__WorkSpace__index.b444d0fb.chunk.css │ ├── preload_helper.bb18ecb8.js │ ├── pro_icon.svg │ ├── scripts │ │ └── loading.js │ ├── t__plugin-layout__Layout.72a3081c.async.js │ ├── t__plugin-layout__Layout.9fc5ee3f.chunk.css │ ├── umi.810c2ee2.css │ ├── umi.f50e02ef.js │ └── vs │ │ ├── base │ │ ├── browser │ │ │ └── ui │ │ │ │ └── codicons │ │ │ │ └── codicon │ │ │ │ └── codicon.ttf │ │ ├── common │ │ │ └── worker │ │ │ │ ├── simpleWorker.nls.de.js │ │ │ │ ├── simpleWorker.nls.es.js │ │ │ │ ├── simpleWorker.nls.fr.js │ │ │ │ ├── simpleWorker.nls.it.js │ │ │ │ ├── simpleWorker.nls.ja.js │ │ │ │ ├── simpleWorker.nls.js │ │ │ │ ├── simpleWorker.nls.ko.js │ │ │ │ ├── simpleWorker.nls.ru.js │ │ │ │ ├── simpleWorker.nls.zh-cn.js │ │ │ │ └── simpleWorker.nls.zh-tw.js │ │ └── worker │ │ │ └── workerMain.js │ │ ├── basic-languages │ │ ├── abap │ │ │ └── abap.js │ │ ├── apex │ │ │ └── apex.js │ │ ├── azcli │ │ │ └── azcli.js │ │ ├── bat │ │ │ └── bat.js │ │ ├── bicep │ │ │ └── bicep.js │ │ ├── cameligo │ │ │ └── cameligo.js │ │ ├── clojure │ │ │ └── clojure.js │ │ ├── coffee │ │ │ └── coffee.js │ │ ├── cpp │ │ │ └── cpp.js │ │ ├── csharp │ │ │ └── csharp.js │ │ ├── csp │ │ │ └── csp.js │ │ ├── css │ │ │ └── css.js │ │ ├── cypher │ │ │ └── cypher.js │ │ ├── dart │ │ │ └── dart.js │ │ ├── dockerfile │ │ │ └── dockerfile.js │ │ ├── ecl │ │ │ └── ecl.js │ │ ├── elixir │ │ │ └── elixir.js │ │ ├── flow9 │ │ │ └── flow9.js │ │ ├── freemarker2 │ │ │ └── freemarker2.js │ │ ├── fsharp │ │ │ └── fsharp.js │ │ ├── go │ │ │ └── go.js │ │ ├── graphql │ │ │ └── graphql.js │ │ ├── handlebars │ │ │ └── handlebars.js │ │ ├── hcl │ │ │ └── hcl.js │ │ ├── html │ │ │ └── html.js │ │ ├── ini │ │ │ └── ini.js │ │ ├── java │ │ │ └── java.js │ │ ├── javascript │ │ │ └── javascript.js │ │ ├── julia │ │ │ └── julia.js │ │ ├── kotlin │ │ │ └── kotlin.js │ │ ├── less │ │ │ └── less.js │ │ ├── lexon │ │ │ └── lexon.js │ │ ├── liquid │ │ │ └── liquid.js │ │ ├── lua │ │ │ └── lua.js │ │ ├── m3 │ │ │ └── m3.js │ │ ├── markdown │ │ │ └── markdown.js │ │ ├── mdx │ │ │ └── mdx.js │ │ ├── mips │ │ │ └── mips.js │ │ ├── msdax │ │ │ └── msdax.js │ │ ├── mysql │ │ │ └── mysql.js │ │ ├── objective-c │ │ │ └── objective-c.js │ │ ├── pascal │ │ │ └── pascal.js │ │ ├── pascaligo │ │ │ └── pascaligo.js │ │ ├── perl │ │ │ └── perl.js │ │ ├── pgsql │ │ │ └── pgsql.js │ │ ├── php │ │ │ └── php.js │ │ ├── pla │ │ │ └── pla.js │ │ ├── postiats │ │ │ └── postiats.js │ │ ├── powerquery │ │ │ └── powerquery.js │ │ ├── powershell │ │ │ └── powershell.js │ │ ├── protobuf │ │ │ └── protobuf.js │ │ ├── pug │ │ │ └── pug.js │ │ ├── python │ │ │ └── python.js │ │ ├── qsharp │ │ │ └── qsharp.js │ │ ├── r │ │ │ └── r.js │ │ ├── razor │ │ │ └── razor.js │ │ ├── redis │ │ │ └── redis.js │ │ ├── redshift │ │ │ └── redshift.js │ │ ├── restructuredtext │ │ │ └── restructuredtext.js │ │ ├── ruby │ │ │ └── ruby.js │ │ ├── rust │ │ │ └── rust.js │ │ ├── sb │ │ │ └── sb.js │ │ ├── scala │ │ │ └── scala.js │ │ ├── scheme │ │ │ └── scheme.js │ │ ├── scss │ │ │ └── scss.js │ │ ├── shell │ │ │ └── shell.js │ │ ├── solidity │ │ │ └── solidity.js │ │ ├── sophia │ │ │ └── sophia.js │ │ ├── sparql │ │ │ └── sparql.js │ │ ├── sql │ │ │ └── sql.js │ │ ├── st │ │ │ └── st.js │ │ ├── swift │ │ │ └── swift.js │ │ ├── systemverilog │ │ │ └── systemverilog.js │ │ ├── tcl │ │ │ └── tcl.js │ │ ├── twig │ │ │ └── twig.js │ │ ├── typescript │ │ │ └── typescript.js │ │ ├── vb │ │ │ └── vb.js │ │ ├── wgsl │ │ │ └── wgsl.js │ │ ├── xml │ │ │ └── xml.js │ │ └── yaml │ │ │ └── yaml.js │ │ ├── editor │ │ ├── editor.main.css │ │ ├── editor.main.js │ │ ├── editor.main.nls.de.js │ │ ├── editor.main.nls.es.js │ │ ├── editor.main.nls.fr.js │ │ ├── editor.main.nls.it.js │ │ ├── editor.main.nls.ja.js │ │ ├── editor.main.nls.js │ │ ├── editor.main.nls.ko.js │ │ ├── editor.main.nls.ru.js │ │ ├── editor.main.nls.zh-cn.js │ │ └── editor.main.nls.zh-tw.js │ │ ├── language │ │ ├── css │ │ │ ├── cssMode.js │ │ │ └── cssWorker.js │ │ ├── html │ │ │ ├── htmlMode.js │ │ │ └── htmlWorker.js │ │ ├── json │ │ │ ├── jsonMode.js │ │ │ └── jsonWorker.js │ │ └── typescript │ │ │ ├── tsMode.js │ │ │ └── tsWorker.js │ │ └── loader.js ├── ex.ts ├── jest.config.ts ├── jsconfig.json ├── mock │ └── route.ts ├── package.json ├── postcss.config.js ├── public │ ├── CNAME │ ├── favicon.ico │ ├── icons │ │ ├── add_blue.svg │ │ ├── add_white.svg │ │ ├── age222nt_1.svg │ │ ├── agent.svg │ │ ├── agent_create.svg │ │ ├── agent_skill.svg │ │ ├── agents_create.svg │ │ ├── arrow-clockwise.svg │ │ ├── arrow-counterclockwise.svg │ │ ├── back_log.svg │ │ ├── chat_copy.svg │ │ ├── chat_copy_check.svg │ │ ├── chat_copy_w.svg │ │ ├── chat_room.svg │ │ ├── condition_branch.svg │ │ ├── creation │ │ │ ├── add.svg │ │ │ ├── agent.svg │ │ │ ├── chat_room.svg │ │ │ ├── gongzuoliu1.svg │ │ │ ├── gongzuoliu2.svg │ │ │ ├── jienng1.svg │ │ │ ├── pitchagent.svg │ │ │ ├── pitchgongzuoliu.svg │ │ │ ├── pitchquanbu.svg │ │ │ ├── pitchskill.svg │ │ │ ├── pitchzhishik.svg │ │ │ ├── quanbu.svg │ │ │ ├── signgongzuoliu.svg │ │ │ ├── signskill.svg │ │ │ ├── signzhishik.svg │ │ │ ├── unselectedprocess.svg │ │ │ ├── unselectedrepository.svg │ │ │ ├── unselectedrobot.svg │ │ │ ├── unselectedskill.svg │ │ │ └── zhishik1.svg │ │ ├── custom_code.svg │ │ ├── default.svg │ │ ├── delete.svg │ │ ├── delete_icon.svg │ │ ├── edit_icon.svg │ │ ├── edit_icon_1.svg │ │ ├── end.svg │ │ ├── flag.svg │ │ ├── fs.svg │ │ ├── gandUp.svg │ │ ├── headportrait │ │ │ ├── Android.svg │ │ │ ├── SQL.svg │ │ │ ├── Viewprocess.svg │ │ │ ├── aircraft.svg │ │ │ ├── consultingfee.svg │ │ │ ├── leaf.svg │ │ │ ├── mainprocess.svg │ │ │ ├── map.svg │ │ │ ├── python.svg │ │ │ ├── science.svg │ │ │ ├── subprocess.svg │ │ │ └── travel.svg │ │ ├── http_icon.svg │ │ ├── http_request.svg │ │ ├── human.svg │ │ ├── journal-text.svg │ │ ├── json.svg │ │ ├── justify.svg │ │ ├── kb_setting.svg │ │ ├── kb_setting_select.svg │ │ ├── knowledge_base.svg │ │ ├── lang.svg │ │ ├── llm.svg │ │ ├── local.svg │ │ ├── local_select.svg │ │ ├── logo.svg │ │ ├── manual_confirmation.svg │ │ ├── md.svg │ │ ├── more.svg │ │ ├── number.svg │ │ ├── online.svg │ │ ├── online_select.svg │ │ ├── operation_disable_icon.svg │ │ ├── operation_icon.svg │ │ ├── pdf.svg │ │ ├── play_disable_icon.svg │ │ ├── play_icon.svg │ │ ├── plaza_add.svg │ │ ├── plaza_m1_c1.svg │ │ ├── plaza_m1_c2.svg │ │ ├── plaza_m2_c1.svg │ │ ├── plaza_m2_c2.svg │ │ ├── plaza_view.svg │ │ ├── recall_test.svg │ │ ├── recall_test_select.svg │ │ ├── recently_active.svg │ │ ├── recursive_task_execution.svg │ │ ├── recursive_task_generation.svg │ │ ├── requirement_category.svg │ │ ├── retriever.svg │ │ ├── return.svg │ │ ├── robot_icon.svg │ │ ├── search_icon.svg │ │ ├── send_icon_w.svg │ │ ├── skill.svg │ │ ├── start.svg │ │ ├── start_icon.svg │ │ ├── tag.svg │ │ ├── template_conversion.svg │ │ ├── text-center.svg │ │ ├── text-left.svg │ │ ├── text-paragraph.svg │ │ ├── text-right.svg │ │ ├── text.svg │ │ ├── textIcon.svg │ │ ├── tool.svg │ │ ├── txt.svg │ │ ├── type-bold.svg │ │ ├── type-italic.svg │ │ ├── type-strikethrough.svg │ │ ├── type-underline.svg │ │ ├── unpublish.svg │ │ ├── uptxt.svg │ │ ├── uptxt_select.svg │ │ ├── user_header.svg │ │ ├── variable_aggregation.svg │ │ ├── word.svg │ │ ├── workflow_icon.svg │ │ ├── workflows.svg │ │ ├── xlsx.svg │ │ ├── zh.svg │ │ └── zishu.svg │ ├── images │ │ ├── arrow.svg │ │ ├── bg.png │ │ ├── creation.svg │ │ ├── creation_active.svg │ │ ├── empty.svg │ │ ├── home.svg │ │ ├── home_active.svg │ │ ├── logo.svg │ │ ├── workflow.svg │ │ └── workflow_active.svg │ ├── logo.svg │ ├── pro_icon.svg │ ├── scripts │ │ └── loading.js │ └── vs │ │ ├── base │ │ ├── browser │ │ │ └── ui │ │ │ │ └── codicons │ │ │ │ └── codicon │ │ │ │ └── codicon.ttf │ │ ├── common │ │ │ └── worker │ │ │ │ ├── simpleWorker.nls.de.js │ │ │ │ ├── simpleWorker.nls.es.js │ │ │ │ ├── simpleWorker.nls.fr.js │ │ │ │ ├── simpleWorker.nls.it.js │ │ │ │ ├── simpleWorker.nls.ja.js │ │ │ │ ├── simpleWorker.nls.js │ │ │ │ ├── simpleWorker.nls.ko.js │ │ │ │ ├── simpleWorker.nls.ru.js │ │ │ │ ├── simpleWorker.nls.zh-cn.js │ │ │ │ └── simpleWorker.nls.zh-tw.js │ │ └── worker │ │ │ └── workerMain.js │ │ ├── basic-languages │ │ ├── abap │ │ │ └── abap.js │ │ ├── apex │ │ │ └── apex.js │ │ ├── azcli │ │ │ └── azcli.js │ │ ├── bat │ │ │ └── bat.js │ │ ├── bicep │ │ │ └── bicep.js │ │ ├── cameligo │ │ │ └── cameligo.js │ │ ├── clojure │ │ │ └── clojure.js │ │ ├── coffee │ │ │ └── coffee.js │ │ ├── cpp │ │ │ └── cpp.js │ │ ├── csharp │ │ │ └── csharp.js │ │ ├── csp │ │ │ └── csp.js │ │ ├── css │ │ │ └── css.js │ │ ├── cypher │ │ │ └── cypher.js │ │ ├── dart │ │ │ └── dart.js │ │ ├── dockerfile │ │ │ └── dockerfile.js │ │ ├── ecl │ │ │ └── ecl.js │ │ ├── elixir │ │ │ └── elixir.js │ │ ├── flow9 │ │ │ └── flow9.js │ │ ├── freemarker2 │ │ │ └── freemarker2.js │ │ ├── fsharp │ │ │ └── fsharp.js │ │ ├── go │ │ │ └── go.js │ │ ├── graphql │ │ │ └── graphql.js │ │ ├── handlebars │ │ │ └── handlebars.js │ │ ├── hcl │ │ │ └── hcl.js │ │ ├── html │ │ │ └── html.js │ │ ├── ini │ │ │ └── ini.js │ │ ├── java │ │ │ └── java.js │ │ ├── javascript │ │ │ └── javascript.js │ │ ├── julia │ │ │ └── julia.js │ │ ├── kotlin │ │ │ └── kotlin.js │ │ ├── less │ │ │ └── less.js │ │ ├── lexon │ │ │ └── lexon.js │ │ ├── liquid │ │ │ └── liquid.js │ │ ├── lua │ │ │ └── lua.js │ │ ├── m3 │ │ │ └── m3.js │ │ ├── markdown │ │ │ └── markdown.js │ │ ├── mdx │ │ │ └── mdx.js │ │ ├── mips │ │ │ └── mips.js │ │ ├── msdax │ │ │ └── msdax.js │ │ ├── mysql │ │ │ └── mysql.js │ │ ├── objective-c │ │ │ └── objective-c.js │ │ ├── pascal │ │ │ └── pascal.js │ │ ├── pascaligo │ │ │ └── pascaligo.js │ │ ├── perl │ │ │ └── perl.js │ │ ├── pgsql │ │ │ └── pgsql.js │ │ ├── php │ │ │ └── php.js │ │ ├── pla │ │ │ └── pla.js │ │ ├── postiats │ │ │ └── postiats.js │ │ ├── powerquery │ │ │ └── powerquery.js │ │ ├── powershell │ │ │ └── powershell.js │ │ ├── protobuf │ │ │ └── protobuf.js │ │ ├── pug │ │ │ └── pug.js │ │ ├── python │ │ │ └── python.js │ │ ├── qsharp │ │ │ └── qsharp.js │ │ ├── r │ │ │ └── r.js │ │ ├── razor │ │ │ └── razor.js │ │ ├── redis │ │ │ └── redis.js │ │ ├── redshift │ │ │ └── redshift.js │ │ ├── restructuredtext │ │ │ └── restructuredtext.js │ │ ├── ruby │ │ │ └── ruby.js │ │ ├── rust │ │ │ └── rust.js │ │ ├── sb │ │ │ └── sb.js │ │ ├── scala │ │ │ └── scala.js │ │ ├── scheme │ │ │ └── scheme.js │ │ ├── scss │ │ │ └── scss.js │ │ ├── shell │ │ │ └── shell.js │ │ ├── solidity │ │ │ └── solidity.js │ │ ├── sophia │ │ │ └── sophia.js │ │ ├── sparql │ │ │ └── sparql.js │ │ ├── sql │ │ │ └── sql.js │ │ ├── st │ │ │ └── st.js │ │ ├── swift │ │ │ └── swift.js │ │ ├── systemverilog │ │ │ └── systemverilog.js │ │ ├── tcl │ │ │ └── tcl.js │ │ ├── twig │ │ │ └── twig.js │ │ ├── typescript │ │ │ └── typescript.js │ │ ├── vb │ │ │ └── vb.js │ │ ├── wgsl │ │ │ └── wgsl.js │ │ ├── xml │ │ │ └── xml.js │ │ └── yaml │ │ │ └── yaml.js │ │ ├── editor │ │ ├── editor.main.css │ │ ├── editor.main.js │ │ ├── editor.main.nls.de.js │ │ ├── editor.main.nls.es.js │ │ ├── editor.main.nls.fr.js │ │ ├── editor.main.nls.it.js │ │ ├── editor.main.nls.ja.js │ │ ├── editor.main.nls.js │ │ ├── editor.main.nls.ko.js │ │ ├── editor.main.nls.ru.js │ │ ├── editor.main.nls.zh-cn.js │ │ └── editor.main.nls.zh-tw.js │ │ ├── language │ │ ├── css │ │ │ ├── cssMode.js │ │ │ └── cssWorker.js │ │ ├── html │ │ │ ├── htmlMode.js │ │ │ └── htmlWorker.js │ │ ├── json │ │ │ ├── jsonMode.js │ │ │ └── jsonWorker.js │ │ └── typescript │ │ │ ├── tsMode.js │ │ │ └── tsWorker.js │ │ └── loader.js ├── src │ ├── access.ts │ ├── api │ │ ├── agents.ts │ │ ├── createkb.ts │ │ ├── creation.ts │ │ ├── index.ts │ │ ├── plaza.ts │ │ ├── request.ts │ │ ├── setting.ts │ │ ├── skill.ts │ │ ├── team.ts │ │ └── workflow.ts │ ├── app.tsx │ ├── components │ │ ├── AgentCreate │ │ │ ├── BatchCreate.tsx │ │ │ ├── BeforeCreate.tsx │ │ │ ├── EditableCard.tsx │ │ │ ├── ResultDisplay.tsx │ │ │ ├── index.tsx │ │ │ ├── strategies │ │ │ │ ├── BatchCreate.tsx │ │ │ │ └── SingleCreate.tsx │ │ │ └── types.ts │ │ ├── ChatAvatar.tsx │ │ ├── ChatRoomAvatar.tsx │ │ ├── ChatRoomContent.tsx │ │ ├── DivEditable.tsx │ │ ├── FileListDisplay.tsx │ │ ├── FileUploadExample.tsx │ │ ├── Footer │ │ │ └── index.tsx │ │ ├── Graphic.tsx │ │ ├── Header │ │ │ └── index.tsx │ │ ├── HeaderDropdown │ │ │ └── index.tsx │ │ ├── InfiniteScroll.tsx │ │ ├── LogPanel │ │ │ ├── ChatRoomLog.tsx │ │ │ ├── LogDetail.tsx │ │ │ ├── RunPanelLog.tsx │ │ │ └── components │ │ │ │ └── TrackContent.tsx │ │ ├── ModelSetup.tsx │ │ ├── Panel │ │ │ └── DraggablePanel.tsx │ │ ├── RightContent │ │ │ ├── AvatarDropdown.tsx │ │ │ └── index.tsx │ │ ├── SelectAvatar │ │ │ └── index.tsx │ │ ├── SkillCreate │ │ │ ├── BeforeCreate.tsx │ │ │ ├── BugFix.tsx │ │ │ ├── ResultDisplay.tsx │ │ │ ├── index.tsx │ │ │ └── types.ts │ │ ├── TagSearch.tsx │ │ ├── WorkFlow │ │ │ ├── RunWorkFlow.tsx │ │ │ ├── UserCon.tsx │ │ │ ├── components │ │ │ │ ├── AniSwitch.tsx │ │ │ │ ├── Count │ │ │ │ │ ├── CountItem.tsx │ │ │ │ │ ├── CountSelect.tsx │ │ │ │ │ ├── VariableSelect.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── DealtWith │ │ │ │ │ ├── DealtWithForLog.tsx │ │ │ │ │ ├── DealtWithForLogBack.tsx │ │ │ │ │ ├── DealtWithNew.tsx │ │ │ │ │ ├── components │ │ │ │ │ │ ├── Container.tsx │ │ │ │ │ │ ├── CustomContent.tsx │ │ │ │ │ │ ├── HumanContent.tsx │ │ │ │ │ │ ├── LLMContent.tsx │ │ │ │ │ │ ├── hooks.ts │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── Editor │ │ │ │ │ ├── CodeEditor.tsx │ │ │ │ │ ├── EditorList.tsx │ │ │ │ │ ├── EditorTable.tsx │ │ │ │ │ ├── ExampleTheme.ts │ │ │ │ │ ├── PromptEditor.tsx │ │ │ │ │ ├── SlateEditor.tsx │ │ │ │ │ ├── SlateEditorV2.tsx │ │ │ │ │ ├── WrapperEditor.tsx │ │ │ │ │ ├── components │ │ │ │ │ │ ├── VariableSelect.tsx │ │ │ │ │ │ └── slateEditorUtils.tsx │ │ │ │ │ ├── editor.less │ │ │ │ │ └── plugins │ │ │ │ │ │ ├── ButtonNode.ts │ │ │ │ │ │ ├── MentionNode.ts │ │ │ │ │ │ ├── MentionPlugin.tsx │ │ │ │ │ │ ├── ToolbarPlugin.tsx │ │ │ │ │ │ └── TreeViewPlugin.tsx │ │ │ │ ├── Form │ │ │ │ │ ├── Input.tsx │ │ │ │ │ ├── Select.tsx │ │ │ │ │ ├── Switch.tsx │ │ │ │ │ └── Upload.tsx │ │ │ │ ├── Menu │ │ │ │ │ └── WorkFlowLeftMenu.tsx │ │ │ │ ├── NodeList │ │ │ │ │ └── index.tsx │ │ │ │ ├── NodePanel │ │ │ │ │ ├── components │ │ │ │ │ │ ├── DraggableList │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── NodePanelContent │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── RunForm │ │ │ │ │ ├── RenderConfirm.tsx │ │ │ │ │ ├── RenderInput.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── RunPanel │ │ │ │ │ ├── RunPanel.tsx │ │ │ │ │ ├── RunPanelBack.tsx │ │ │ │ │ └── components │ │ │ │ │ │ ├── Container.tsx │ │ │ │ │ │ ├── DetailContent.tsx │ │ │ │ │ │ ├── FileDownloadList.tsx │ │ │ │ │ │ ├── InputContent.tsx │ │ │ │ │ │ ├── TrackContent.tsx │ │ │ │ │ │ ├── hooks.ts │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ ├── Tools.tsx │ │ │ │ ├── UserCon.tsx │ │ │ │ ├── Variable.tsx │ │ │ │ ├── VariableInNode.tsx │ │ │ │ ├── VariableSelect.tsx │ │ │ │ └── WorkflowTitle │ │ │ │ │ └── index.tsx │ │ │ ├── config.ts │ │ │ ├── connectionRules.ts │ │ │ ├── context.tsx │ │ │ ├── dataStore.ts │ │ │ ├── hooks │ │ │ │ ├── use-resize-panel.ts │ │ │ │ ├── useAutoLayout.ts │ │ │ │ ├── useDnD.ts │ │ │ │ ├── useFetchData.ts │ │ │ │ ├── useNodeData.ts │ │ │ │ ├── useNodeIdUpdate.ts │ │ │ │ ├── useNodeManagement.ts │ │ │ │ ├── useOutsideClick.ts │ │ │ │ ├── usePageVisibilityEffect .ts │ │ │ │ ├── useTabData.ts │ │ │ │ └── useVariables.ts │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ ├── nodeRules.ts │ │ │ ├── nodes │ │ │ │ ├── Agent │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── ConditionBranch │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── CreateNodesToolbar.tsx │ │ │ │ ├── CreateNodesToolbarPanel.tsx │ │ │ │ ├── CustomCode │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── CustomHandle.tsx │ │ │ │ ├── End │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── Http │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── Human │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── LLM │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── RequirementCategory │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── Retriever │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── RunPanelNode.tsx │ │ │ │ ├── Skill │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── Start │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── TaskExecution │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── TaskGeneration │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── TemplateConversion │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── ToolNode │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── VariableAggregation │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── WrapNode │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── panel.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── nodeDisperse.ts │ │ │ ├── propertyNodes │ │ │ │ ├── config.ts │ │ │ │ ├── nodes │ │ │ │ │ └── KnowledgeRetrieval │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── panel.tsx │ │ │ │ └── types.ts │ │ │ ├── saveWorkFlow.ts │ │ │ ├── store.ts │ │ │ ├── transformRules.ts │ │ │ ├── transformWrokFlow.ts │ │ │ ├── types.ts │ │ │ └── utils │ │ │ │ ├── analysisVariable.ts │ │ │ │ ├── createNode.ts │ │ │ │ └── resetFormNodes.ts │ │ ├── bottomlabel.tsx │ │ ├── callword.tsx │ │ ├── common │ │ │ ├── FileDownloadList.tsx │ │ │ ├── InfiniteScroll.tsx │ │ │ └── InfiniteScrollDemo.tsx │ │ ├── creationModal.tsx │ │ ├── headportrait.tsx │ │ ├── index.ts │ │ └── team.tsx │ ├── db │ │ ├── contentLibrary.ts │ │ └── test.ts │ ├── global.less │ ├── global.tsx │ ├── hooks │ │ ├── useBacklogList.tsx │ │ ├── useFileUpload.ts │ │ ├── useResetPanel.ts │ │ ├── useScrollBarDetect.ts │ │ └── useSocket.ts │ ├── layout │ │ └── index.tsx │ ├── loading.tsx │ ├── locales │ │ ├── en-US.json │ │ ├── en-US.ts │ │ ├── en-US │ │ │ ├── agent.ts │ │ │ ├── component.ts │ │ │ ├── createkb.ts │ │ │ ├── creation.ts │ │ │ ├── globalHeader.ts │ │ │ ├── menu.ts │ │ │ ├── pages.ts │ │ │ ├── plaza.ts │ │ │ ├── pwa.ts │ │ │ ├── settingDrawer.ts │ │ │ ├── settings.ts │ │ │ ├── skill.ts │ │ │ ├── user.ts │ │ │ └── workflow.ts │ │ ├── zh-CN.json │ │ ├── zh-CN.ts │ │ └── zh-CN │ │ │ ├── agent.ts │ │ │ ├── component.ts │ │ │ ├── createkb.ts │ │ │ ├── creation.ts │ │ │ ├── globalHeader.ts │ │ │ ├── menu.ts │ │ │ ├── pages.ts │ │ │ ├── plaza.ts │ │ │ ├── pwa.ts │ │ │ ├── settingDrawer.ts │ │ │ ├── settings.ts │ │ │ ├── skill.ts │ │ │ ├── user.ts │ │ │ └── workflow.ts │ ├── manifest.json │ ├── pages │ │ ├── 404.tsx │ │ ├── Createkb │ │ │ ├── Fileset │ │ │ │ └── index.tsx │ │ │ ├── Kbtext │ │ │ │ └── index.tsx │ │ │ ├── Setup │ │ │ │ └── index.tsx │ │ │ ├── UploadContent │ │ │ │ ├── Upload │ │ │ │ │ ├── upload.css │ │ │ │ │ ├── upload.scss │ │ │ │ │ └── upload.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── Creation │ │ │ ├── Agents │ │ │ │ ├── Chat.tsx │ │ │ │ ├── Log.tsx │ │ │ │ └── index.tsx │ │ │ ├── Skill │ │ │ │ ├── components │ │ │ │ │ ├── SkillFirst │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── SkillFourthly │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── SkillSecond │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── SkillThirdly │ │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── components │ │ │ │ ├── AddCreation │ │ │ │ │ └── index.tsx │ │ │ │ ├── AgentsFirst │ │ │ │ │ └── index.tsx │ │ │ │ ├── AgentsFourthly │ │ │ │ │ └── index.tsx │ │ │ │ ├── AgentsSecond │ │ │ │ │ └── index.tsx │ │ │ │ ├── AgentsThirdly │ │ │ │ │ └── index.tsx │ │ │ │ └── profilephoto │ │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── Plaza │ │ │ ├── ChatRoom │ │ │ │ └── index.tsx │ │ │ ├── Dash_board │ │ │ │ └── index.tsx │ │ │ ├── Meeting │ │ │ │ └── index.tsx │ │ │ └── components │ │ │ │ ├── CreationChatRoom │ │ │ │ ├── index.tsx │ │ │ │ └── selectApp.tsx │ │ │ │ ├── MeetingSummary │ │ │ │ ├── components │ │ │ │ │ ├── RevisionsMeetingSummary.tsx │ │ │ │ │ ├── RunsMeetingSummary.tsx │ │ │ │ │ ├── RunsSummaryAgent.tsx │ │ │ │ │ ├── RunsSummaryWorkflow.tsx │ │ │ │ │ └── SummaryHistoryDom.tsx │ │ │ │ └── index.tsx │ │ │ │ ├── Menus │ │ │ │ └── index.tsx │ │ │ │ └── Sider │ │ │ │ └── index.tsx │ │ ├── ReadOnly │ │ │ ├── Agent │ │ │ │ ├── components │ │ │ │ │ ├── AgentsFirst │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── AgentsFourthly │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── AgentsSecond │ │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ └── Skill │ │ │ │ ├── components │ │ │ │ ├── SkillFirst │ │ │ │ │ └── index.tsx │ │ │ │ ├── SkillFourthly │ │ │ │ │ └── index.tsx │ │ │ │ ├── SkillSecond │ │ │ │ │ └── index.tsx │ │ │ │ └── SkillThirdly │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ ├── User │ │ │ ├── Login │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── login.test.tsx.snap │ │ │ │ ├── index.tsx │ │ │ │ └── login.test.tsx │ │ │ └── Register │ │ │ │ └── index.tsx │ │ └── WorkSpace │ │ │ ├── Log │ │ │ └── index.tsx │ │ │ ├── WorkFlow │ │ │ └── index.tsx │ │ │ ├── components │ │ │ ├── Backlogs.tsx │ │ │ ├── RecentlyActive.tsx │ │ │ ├── TableTitle.tsx │ │ │ └── WorkFlowLog.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ ├── py2js │ │ ├── context.js │ │ ├── edges.js │ │ ├── graph.js │ │ ├── nodes │ │ │ ├── agent.js │ │ │ ├── base.js │ │ │ ├── condition_branch.js │ │ │ ├── constant_variable.js │ │ │ ├── createNodesFromObject.js │ │ │ ├── custom_code.js │ │ │ ├── end.js │ │ │ ├── http_request.js │ │ │ ├── human.js │ │ │ ├── llm.js │ │ │ ├── recursive_task_execution.js │ │ │ ├── recursive_task_generation.js │ │ │ ├── requirement_category.js │ │ │ ├── retriever.js │ │ │ ├── skill.js │ │ │ ├── start.js │ │ │ ├── template_conversion.js │ │ │ ├── test.js │ │ │ ├── tool.js │ │ │ └── variable_aggregation.js │ │ ├── prompt.js │ │ ├── recursive_task.js │ │ ├── variables.js │ │ └── websocket_message.txt │ ├── requestErrorConfig.ts │ ├── service-worker.js │ ├── services │ │ ├── ant-design-pro │ │ │ ├── api.ts │ │ │ ├── index.ts │ │ │ ├── login.ts │ │ │ └── typings.d.ts │ │ └── swagger │ │ │ └── index.ts │ ├── store │ │ ├── chatroomstate.ts │ │ ├── createSelectors.ts │ │ ├── modelList.ts │ │ ├── tags.ts │ │ ├── user.ts │ │ └── websocket.ts │ ├── typings.d.ts │ └── utils │ │ ├── upload.ts │ │ └── useUser.ts ├── tailwind.config.js ├── tests │ └── setupTests.jsx ├── tsconfig.json ├── types │ └── index.d.ts └── typings.d.ts └── websocket.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | .env 3 | upload_files 4 | .aider* 5 | .vscode 6 | test 7 | logs 8 | storage 9 | /models 10 | nexcoder 11 | nexcoder_test 12 | .idea 13 | conda/*.sh 14 | *Zone.Identifier 15 | docker/volumes 16 | envConfig.ts 17 | docker/docker-compose.yml 18 | scripts/test*.py 19 | /supervisord.conf 20 | /docker-compose.yml 21 | .history 22 | .cursor -------------------------------------------------------------------------------- /api/agent/__init__.py: -------------------------------------------------------------------------------- 1 | from .agent import router -------------------------------------------------------------------------------- /api/apps/__init__.py: -------------------------------------------------------------------------------- 1 | from .app_api import router as app_api_router 2 | from .apps import router -------------------------------------------------------------------------------- /api/auth/__init__.py: -------------------------------------------------------------------------------- 1 | from .auth import router -------------------------------------------------------------------------------- /api/chatroom/__init__.py: -------------------------------------------------------------------------------- 1 | # dapeng 2 | from .chatroom import router -------------------------------------------------------------------------------- /api/icon/__init__.py: -------------------------------------------------------------------------------- 1 | from .icon import router 2 | -------------------------------------------------------------------------------- /api/icon/icon.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter 2 | from api.utils.common import response_success, response_error 3 | import os 4 | 5 | router = APIRouter() 6 | 7 | @router.get("/app_icon", response_model=dict) 8 | async def get_app_icon(): 9 | # Define the directory where app icons are stored 10 | icon_directory = "assets/app_icon" 11 | icon_list = [] 12 | 13 | # Iterate over files in the icon directory 14 | for filename in os.listdir(icon_directory): 15 | # Append each file path to the icon list 16 | icon_list.append(f"/app_icon/{filename}") 17 | 18 | # Return a successful response with the list of app icons 19 | return response_success({ 20 | "app_icon": icon_list 21 | }) -------------------------------------------------------------------------------- /api/index/__init__.py: -------------------------------------------------------------------------------- 1 | from .index import router -------------------------------------------------------------------------------- /api/llm/__init__.py: -------------------------------------------------------------------------------- 1 | from .llm import router -------------------------------------------------------------------------------- /api/llm/llm.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter 2 | from api.schema.tools import * 3 | from api.utils.common import * 4 | from api.utils.jwt import * 5 | from core.database.models.models import Models 6 | 7 | # Create a new APIRouter instance 8 | router = APIRouter() 9 | 10 | @router.get("/llm_model_list", response_model=toolsResponse) 11 | async def skill_create(userinfo: TokenData = Depends(get_current_user)): 12 | """ 13 | Endpoint to retrieve the list of LLM model configurations. 14 | 15 | Parameters: 16 | - userinfo: TokenData, required for user authentication and authorization. 17 | 18 | Returns: 19 | - A successful response containing the list of LLM model configurations. 20 | """ 21 | # Retrieve the list of LLM model configurations from the database 22 | result = Models().get_model_config_llm_list() 23 | 24 | # Return the result wrapped in a success response 25 | return response_success({'data': result}) -------------------------------------------------------------------------------- /api/mcp_servers/__init__.py: -------------------------------------------------------------------------------- 1 | from .server import router -------------------------------------------------------------------------------- /api/mcp_servers/server.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter 2 | from typing import Optional 3 | from core.database.models.mcp_server import McpServer 4 | from api.schema.mcp_servers import * 5 | from api.utils.common import * 6 | from api.utils.jwt import * 7 | import json 8 | import sys, os 9 | from time import time 10 | from datetime import datetime 11 | from languages import get_language_content 12 | router = APIRouter() 13 | 14 | @router.get("/", response_model=McpServerListResponse, summary="Get MCP Server List") 15 | async def servers_list(page: int = 1, page_size: int = 10, name: str = "", userinfo: TokenData = Depends(get_current_user)): 16 | """ 17 | Retrieve a list of MCP servers. 18 | 19 | This endpoint retrieves all available MCP servers with pagination and name filtering support. 20 | 21 | Parameters: 22 | - page (int): Current page number, defaults to 1 23 | - page_size (int): Number of items per page, defaults to 10 24 | - name (str): Optional server name for fuzzy search 25 | - userinfo (TokenData): Current user information, obtained through authentication 26 | 27 | Returns: 28 | - Standard response containing server list, formatted according to McpServerListResponse model 29 | 30 | Raises: 31 | - HTTPException: When query execution fails 32 | """ 33 | mcp_server = McpServer() 34 | result = mcp_server.get_server_list(page, page_size, name) 35 | return response_success(result) -------------------------------------------------------------------------------- /api/prompt_editor/__init__.py: -------------------------------------------------------------------------------- 1 | from .router import router 2 | 3 | __all__ = ["router"] -------------------------------------------------------------------------------- /api/schema/base.py: -------------------------------------------------------------------------------- 1 | from typing import Dict,Any 2 | from pydantic import BaseModel 3 | 4 | class ErrorResponseSchema(BaseModel): 5 | status: int = 1000 6 | msg: str = "FAIL" 7 | data: Dict[str, Any] = {} 8 | 9 | class RespBaseSchema(BaseModel): 10 | """ 11 | Base response schema. 12 | 13 | Attributes: 14 | status (int): The response status code, 0 by default. 15 | msg (str): The response message, 'OK' by default. 16 | data (Dict): The response data, an empty dictionary by default. 17 | """ 18 | code: int = 0 19 | detail: str = 'OK' 20 | data: Dict = {} 21 | 22 | # model_config = { 23 | # "json_schema_extra": { 24 | # "examples": [ 25 | # { 26 | # "file_id": "123" 27 | # } 28 | # ] 29 | # } 30 | # } -------------------------------------------------------------------------------- /api/schema/mcp_servers.py: -------------------------------------------------------------------------------- 1 | from typing import List, Optional 2 | from pydantic import BaseModel 3 | 4 | class McpServerInfo(BaseModel): 5 | server_id: str 6 | name: str 7 | description: Optional[str] = None 8 | doc_url: Optional[str] = None 9 | status: int 10 | 11 | class McpServerListData(BaseModel): 12 | list: List[McpServerInfo] 13 | total_count: int 14 | total_pages: int 15 | page: int 16 | page_size: int 17 | 18 | class McpServerListResponse(BaseModel): 19 | code: int = 200 20 | message: str = "success" 21 | data: McpServerListData -------------------------------------------------------------------------------- /api/schema/supplier.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | from typing import Optional, Dict, Any,List 3 | 4 | class ResponseBase(BaseModel): 5 | code: Optional[int] = None 6 | detail: Optional[str] = None 7 | 8 | class SupplierListResponse(BaseModel): 9 | code: Optional[int] = None 10 | detail: Optional[str] = None 11 | data: Optional[Dict[str, Any]] = None 12 | 13 | class SupplierRequest(BaseModel): 14 | supplier_id: Optional[int] = None 15 | config: Optional[List[Any]] = None 16 | 17 | class ModelRequest(BaseModel): 18 | model_id: Optional[int] = None 19 | config: Optional[Dict[str, Any]] = None 20 | 21 | class ModelSwitchRequest(BaseModel): 22 | type: Optional[int] = None 23 | model_id: Optional[int] = None 24 | 25 | class OperationBase(BaseModel): 26 | msg: Optional[str] = None 27 | 28 | 29 | class OperationResponse(ResponseBase): 30 | data: Optional[OperationBase] = None 31 | 32 | -------------------------------------------------------------------------------- /api/schema/tags.py: -------------------------------------------------------------------------------- 1 | from pydantic import BaseModel 2 | from typing import Optional, List 3 | 4 | class ResponseBase(BaseModel): 5 | code: Optional[int] = None 6 | detail: Optional[str] = None 7 | 8 | class TagdataBase(BaseModel): 9 | id: Optional[int] = None 10 | team_id: Optional[int] = None 11 | name: Optional[str] = None 12 | 13 | class TagResponse(ResponseBase): 14 | data: Optional[TagdataBase] = None 15 | 16 | class CreateTagRequest(BaseModel): 17 | mode: int 18 | name: str 19 | 20 | class UpdateTagRequest(BaseModel): 21 | name: str 22 | 23 | class DeleteTagRequest(BaseModel): 24 | tag_id: int 25 | 26 | class CreateTagBindingRequest(BaseModel): 27 | tag_ids: List[int] 28 | app_ids: List[int] 29 | 30 | class TagListBase(BaseModel): 31 | id: Optional[int] = None 32 | mode: Optional[int] = None 33 | name: Optional[str] = None 34 | reference_count: Optional[int] = None 35 | 36 | class TagsListResponse(BaseModel): 37 | code: Optional[int] = None 38 | detail: Optional[str] = None 39 | data: Optional[List[TagListBase]] = None -------------------------------------------------------------------------------- /api/schema/tools.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Optional 2 | from pydantic import BaseModel 3 | 4 | class toolsResponse(BaseModel): 5 | code: int 6 | detail: str 7 | data: Optional[Any] = None # modified to support nested response structures 8 | -------------------------------------------------------------------------------- /api/skill/__init__.py: -------------------------------------------------------------------------------- 1 | from .skill import router -------------------------------------------------------------------------------- /api/supplier/__init__.py: -------------------------------------------------------------------------------- 1 | from .supplier import router -------------------------------------------------------------------------------- /api/tags/__init__.py: -------------------------------------------------------------------------------- 1 | from .tags import router -------------------------------------------------------------------------------- /api/tools/__init__.py: -------------------------------------------------------------------------------- 1 | from .tools import router -------------------------------------------------------------------------------- /api/upload/__init__.py: -------------------------------------------------------------------------------- 1 | from .upload import router -------------------------------------------------------------------------------- /api/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/api/utils/__init__.py -------------------------------------------------------------------------------- /api/utils/connection.py: -------------------------------------------------------------------------------- 1 | from fastapi import WebSocket 2 | class ConnectionManager: 3 | def __init__(self): 4 | self.active_connections: list[WebSocket] = [] 5 | 6 | async def connect(self, websocket: WebSocket): 7 | """ 8 | Connect the websocket. 9 | """ 10 | await websocket.accept() 11 | self.active_connections.append(websocket) 12 | 13 | def disconnect(self, websocket: WebSocket): 14 | """ 15 | Disconnect the websocket. 16 | """ 17 | self.active_connections.remove(websocket) 18 | 19 | async def send_personal_message(self, message: str, websocket: WebSocket): 20 | """ 21 | Send a personal message to the websocket. 22 | """ 23 | await websocket.send_text(message) 24 | 25 | async def broadcast(self, message: str): 26 | """ 27 | Broadcast a message to all websockets. 28 | """ 29 | for connection in self.active_connections: 30 | await connection.send_text(message) -------------------------------------------------------------------------------- /api/vector/__init__.py: -------------------------------------------------------------------------------- 1 | from .vector import router -------------------------------------------------------------------------------- /api/workflow/__init__.py: -------------------------------------------------------------------------------- 1 | from .workflow import router 2 | from .node import router -------------------------------------------------------------------------------- /api/workspace/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | # jiangbo 3 | from .workspace import router -------------------------------------------------------------------------------- /assets/tool/code.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/tool/stability.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /core/auth/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/core/auth/__init__.py -------------------------------------------------------------------------------- /core/chatroom/__init__.py: -------------------------------------------------------------------------------- 1 | from .chatroom_manager import ChatroomManager 2 | -------------------------------------------------------------------------------- /core/database/__init__.py: -------------------------------------------------------------------------------- 1 | from redis import Redis 2 | 3 | from config import settings 4 | 5 | from .sql_database import SQLDatabase 6 | from .mysql import MySQL, Conditions 7 | 8 | 9 | redis = Redis( 10 | host=settings.REDIS_HOST, 11 | port=settings.REDIS_PORT, 12 | db=settings.REDIS_DB, 13 | password=settings.REDIS_PASSWORD 14 | ) 15 | 16 | __all__ = [ 17 | "SQLDatabase", 18 | "MySQL", 19 | "Conditions", 20 | "redis" 21 | ] 22 | -------------------------------------------------------------------------------- /core/database/models/agent_dataset_relation.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Dict, List 2 | from core.database import MySQL 3 | 4 | class AgentDatasetRelation(MySQL): 5 | """ 6 | A class that extends MySQL to manage operations on the {table_name} table. 7 | """ 8 | 9 | table_name = "agent_dataset_relation" 10 | """ 11 | Indicates whether the `agent_dataset_relation` table has an `update_time` column that tracks when a record was last updated. 12 | """ 13 | have_updated_time = False 14 | 15 | 16 | def get_relations_by_agent_id(self, agent_id: int) -> List[Dict[str, Any]]: 17 | """ 18 | Retrieves all dataset relations for a given agent. 19 | 20 | :param agent_id: int, the ID of the agent. 21 | :return: A dictionary containing the dataset relations for the agent. 22 | """ 23 | return self.select( 24 | columns=[ 25 | 'id', 26 | 'dataset_id' 27 | ], 28 | conditions=[ 29 | {'column': 'agent_id', 'value': agent_id} 30 | ] 31 | ) 32 | -------------------------------------------------------------------------------- /core/database/models/app_workflow_relation.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | import math 3 | from typing import Any, Dict, List 4 | from core.database import MySQL 5 | 6 | 7 | class AppWorkflowRelations(MySQL): 8 | """ 9 | A class that extends MySQL to manage operations on the {table_name} table. 10 | """ 11 | 12 | table_name = "app_workflow_relation" 13 | """ 14 | Indicates whether the `workflows` table has an `update_time` column that tracks when a record was last updated. 15 | """ 16 | have_updated_time = True -------------------------------------------------------------------------------- /core/database/models/dataset_process_rules.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Dict, List 2 | from core.database import MySQL 3 | 4 | class DatasetProcessRules(MySQL): 5 | """ 6 | A class that extends MySQL to manage operations on the {table_name} table. 7 | """ 8 | 9 | table_name = "dataset_process_rules" 10 | """ 11 | Indicates whether the `dataset_process_rules` table has an `update_time` column that tracks when a record was last updated. 12 | """ 13 | have_updated_time = True 14 | 15 | 16 | def get_automatic_process_rule(self) -> Dict[str, Any]: 17 | process_rule = self.select_one( 18 | columns=['id'], 19 | conditions=[ 20 | {'column': 'mode', 'value': 1}, 21 | {'column': 'status', 'value': 1} 22 | ] 23 | ) 24 | assert process_rule, 'No available dataset process rule!' 25 | return process_rule 26 | 27 | def get_process_rule_by_id(self, process_rule_id: int) -> Dict[str, Any]: 28 | """ 29 | Retrieves the process rule configuration for a given process rule ID. 30 | 31 | :param process_rule_id: The process rule ID. 32 | :return: The process rule configuration. 33 | """ 34 | process_rule = self.select_one( 35 | columns=['config'], 36 | conditions=[ 37 | {'column': 'id', 'value': process_rule_id}, 38 | {'column': 'status', 'value': 1} 39 | ] 40 | ) 41 | return process_rule 42 | -------------------------------------------------------------------------------- /core/database/models/rag_records.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Dict, List 2 | from core.database import MySQL 3 | 4 | class RagRecords(MySQL): 5 | """ 6 | A class that extends MySQL to manage operations on the {table_name} table. 7 | """ 8 | 9 | table_name = "rag_records" 10 | """ 11 | Indicates whether the `rag_records` table has an `update_time` column that tracks when a record was last updated. 12 | """ 13 | have_updated_time = True 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /core/database/models/supplier_configurations.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Dict, List 2 | from core.database import MySQL 3 | 4 | class SupplierConfigurations(MySQL): 5 | """ 6 | Extends MySQL to manage operations on the supplier_configurations table. 7 | """ 8 | 9 | table_name: str = "supplier_configurations" 10 | """ 11 | Indicates whether the supplier_configurations table has an update_time column that tracks when a record was last updated. 12 | """ 13 | have_updated_time = True 14 | def get_supplier_config_id(self, supplier_id: int,team_id: int) -> Dict: 15 | """ 16 | Retrieves a supplier's configuration based on their ID. 17 | 18 | Args: 19 | - supplier_id (int): The ID of the supplier to retrieve configuration for. 20 | 21 | Returns: 22 | - Dict: A dictionary containing the supplier's configuration. 23 | """ 24 | supplier_config = self.select_one(columns="*", conditions=[{'column': 'supplier_id', 'value': supplier_id},{'column': 'team_id', 'value': team_id}]) 25 | return supplier_config 26 | -------------------------------------------------------------------------------- /core/database/models/teams.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Dict, List 2 | from core.database import MySQL 3 | 4 | class Teams(MySQL): 5 | """ 6 | A class that extends MySQL to manage operations on the {table_name} table. 7 | """ 8 | 9 | table_name = "teams" 10 | """ 11 | Indicates whether the `teams` table has an `update_time` column that tracks when a record was last updated. 12 | """ 13 | have_updated_time = True -------------------------------------------------------------------------------- /core/database/models/tool_authorizations.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Dict, List 2 | from core.database import MySQL 3 | 4 | class ToolAuthorizations(MySQL): 5 | """ 6 | A class that extends MySQL to manage operations on the {table_name} table. 7 | """ 8 | 9 | table_name: str = "tool_authorizations" 10 | """ 11 | Indicates whether the `tool_authorizations` table has an `update_time` column that tracks when a record was last updated. 12 | """ 13 | have_updated_time = True 14 | 15 | def get_tool_info(self,user_id: int, team_id: int,provider:str) -> Dict[str, Any]: 16 | tool = self.select_one(columns='*', 17 | conditions=[ 18 | {"column": "user_id", "value": user_id}, 19 | {"column": "team_id", "value": team_id}, 20 | {"column": "provider", "value": provider}, 21 | ]) 22 | if not tool: 23 | return {'status': 2, 'message': 'tool not found'} 24 | return {'status': 1, 'message': 'ok', 'data': tool} -------------------------------------------------------------------------------- /core/dataset/__init__.py: -------------------------------------------------------------------------------- 1 | from .dataset import DatasetManagement, DatasetRetrieval 2 | -------------------------------------------------------------------------------- /core/dataset/gpt2/special_tokens_map.json: -------------------------------------------------------------------------------- 1 | { 2 | "bos_token": { 3 | "content": "<|endoftext|>", 4 | "lstrip": false, 5 | "normalized": true, 6 | "rstrip": false, 7 | "single_word": false 8 | }, 9 | "eos_token": { 10 | "content": "<|endoftext|>", 11 | "lstrip": false, 12 | "normalized": true, 13 | "rstrip": false, 14 | "single_word": false 15 | }, 16 | "unk_token": { 17 | "content": "<|endoftext|>", 18 | "lstrip": false, 19 | "normalized": true, 20 | "rstrip": false, 21 | "single_word": false 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /core/dataset/gpt2/tokenizer_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "add_bos_token": false, 3 | "add_prefix_space": false, 4 | "bos_token": { 5 | "__type": "AddedToken", 6 | "content": "<|endoftext|>", 7 | "lstrip": false, 8 | "normalized": true, 9 | "rstrip": false, 10 | "single_word": false 11 | }, 12 | "clean_up_tokenization_spaces": true, 13 | "eos_token": { 14 | "__type": "AddedToken", 15 | "content": "<|endoftext|>", 16 | "lstrip": false, 17 | "normalized": true, 18 | "rstrip": false, 19 | "single_word": false 20 | }, 21 | "errors": "replace", 22 | "model_max_length": 1024, 23 | "pad_token": null, 24 | "tokenizer_class": "GPT2Tokenizer", 25 | "unk_token": { 26 | "__type": "AddedToken", 27 | "content": "<|endoftext|>", 28 | "lstrip": false, 29 | "normalized": true, 30 | "rstrip": false, 31 | "single_word": false 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /core/document/__init__.py: -------------------------------------------------------------------------------- 1 | from .document_loader import GeneralDocumentLoader as DocumentLoader 2 | from .text_splitter import GeneralTextSplitter as TextSplitter -------------------------------------------------------------------------------- /core/embeddings/__init__.py: -------------------------------------------------------------------------------- 1 | from .embeddings import GeneralEmbeddings as Embeddings -------------------------------------------------------------------------------- /core/embeddings/text2vec.py: -------------------------------------------------------------------------------- 1 | from typing import List 2 | 3 | from langchain_community.embeddings.text2vec import Text2vecEmbeddings as OriginalText2vecEmbeddings 4 | 5 | from numpy import ndarray 6 | 7 | 8 | class Text2vecEmbeddings(OriginalText2vecEmbeddings): 9 | model_config = { 10 | "extra": "allow", 11 | "arbitrary_types_allowed": True, 12 | } 13 | 14 | def embed_documents(self, texts: List[str]) -> List[List[float]]: 15 | """Embed documents using the text2vec embeddings model. 16 | 17 | Args: 18 | texts: The list of texts to embed. 19 | 20 | Returns: 21 | List of embeddings, one for each text. 22 | """ 23 | result = self.model.encode(texts, normalize_embeddings=True) 24 | if isinstance(result, ndarray): 25 | result = result.tolist() 26 | return result 27 | 28 | 29 | def embed_query(self, text: str) -> List[float]: 30 | """Embed a query using the text2vec embeddings model. 31 | 32 | Args: 33 | text: The text to embed. 34 | 35 | Returns: 36 | Embeddings for the text. 37 | """ 38 | result = self.model.encode(text, normalize_embeddings=True) 39 | if isinstance(result, ndarray): 40 | result = result.tolist() 41 | return result 42 | -------------------------------------------------------------------------------- /core/file/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/core/file/__init__.py -------------------------------------------------------------------------------- /core/image_generation/__init__.py: -------------------------------------------------------------------------------- 1 | from .models import ImageGeneration 2 | 3 | __all__ = ['ImageGeneration'] -------------------------------------------------------------------------------- /core/llm/__init__.py: -------------------------------------------------------------------------------- 1 | from .prompt import Prompt, create_prompt_from_dict, replace_prompt_with_context, get_serialized_prompt_from_messages 2 | from .messages import Messages, create_messages_from_serialized_format 3 | from .models import LLMPipeline 4 | 5 | __all__ = [ 6 | "Prompt", 7 | "create_prompt_from_dict", 8 | "replace_prompt_with_context", 9 | "get_serialized_prompt_from_messages" 10 | 11 | "Messages", 12 | "create_messages_from_serialized_format", 13 | 14 | "LLMPipeline" 15 | ] -------------------------------------------------------------------------------- /core/memory/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/core/memory/__init__.py -------------------------------------------------------------------------------- /core/reranker/__init__.py: -------------------------------------------------------------------------------- 1 | from .reranker import GeneralReranker as Reranker -------------------------------------------------------------------------------- /core/retriever/__init__.py: -------------------------------------------------------------------------------- 1 | from .retriever import GeneralRetriever as Retriever -------------------------------------------------------------------------------- /core/tool/errors.py: -------------------------------------------------------------------------------- 1 | class ToolCertificateVerification(ValueError): 2 | ''' 3 | This is tool certificate validation Error 4 | ''' 5 | pass 6 | 7 | class ToolProviderNotFoundError(Exception): 8 | ''' 9 | Raised when the specified tool provider cannot be found. 10 | ''' 11 | pass -------------------------------------------------------------------------------- /core/tool/provider/builtin/code/code.py: -------------------------------------------------------------------------------- 1 | from core.tool.provider.builtin_tool_provider import BuiltinTool 2 | 3 | class CodeToolProvider(BuiltinTool): 4 | def __init__(self, credentials: dict): 5 | """ 6 | Initialize the CodeToolProvider with the given credentials. 7 | 8 | :param credentials: A dictionary containing authentication credentials. 9 | """ 10 | super().__init__(credentials) 11 | 12 | def validate(self) -> bool: 13 | """ 14 | Validate the credentials. 15 | 16 | :return: True if the credentials are valid, False otherwise. 17 | """ 18 | return True -------------------------------------------------------------------------------- /core/tool/provider/builtin/code/code.yaml: -------------------------------------------------------------------------------- 1 | identity: 2 | author: Dify 3 | name: code 4 | label: 5 | en_US: Code Interpreter 6 | zh_Hans: 代码解释器 7 | pt_BR: Interpretador de Código 8 | description: 9 | en_US: Run a piece of code and get the result back. 10 | zh_Hans: 运行一段代码并返回结果。 11 | pt_BR: Execute um trecho de código e obtenha o resultado de volta. 12 | icon: code.svg 13 | tags: 14 | - productivity 15 | credentials_for_provider: 16 | -------------------------------------------------------------------------------- /core/tool/provider/builtin/duckduckgo/duckduckgo.py: -------------------------------------------------------------------------------- 1 | from core.tool.provider.builtin_tool_provider import BuiltinTool 2 | 3 | class DuckDuckGoProvider(BuiltinTool): 4 | def __init__(self, credentials: dict): 5 | """ 6 | Initialize the DuckDuckGoProvider with the given credentials. 7 | 8 | :param credentials: A dictionary containing authentication credentials. 9 | """ 10 | super().__init__(credentials) 11 | 12 | def validate(self) -> bool: 13 | """ 14 | Validate the credentials. 15 | 16 | :return: True if the credentials are valid, False otherwise. 17 | """ 18 | return True -------------------------------------------------------------------------------- /core/tool/provider/builtin/duckduckgo/duckduckgo.yaml: -------------------------------------------------------------------------------- 1 | identity: 2 | author: Yash Parmar 3 | name: duckduckgo 4 | label: 5 | en_US: DuckDuckGo 6 | zh_Hans: DuckDuckGo 7 | description: 8 | en_US: A privacy-focused search engine. 9 | zh_Hans: 一个注重隐私的搜索引擎。 10 | icon: duckduckgo.svg 11 | tags: 12 | - search 13 | -------------------------------------------------------------------------------- /core/tool/provider/builtin/duckduckgo/tool/ddgo_search.yaml: -------------------------------------------------------------------------------- 1 | identity: 2 | name: ddgo_search 3 | author: Yash Parmar 4 | label: 5 | en_US: DuckDuckGo Search 6 | zh_Hans: DuckDuckGo 搜索 7 | description: 8 | human: 9 | en_US: Perform searches on DuckDuckGo and get results. 10 | zh_Hans: 在 DuckDuckGo 上进行搜索并获取结果。 11 | llm: Perform searches on DuckDuckGo and get results. 12 | parameters: 13 | - name: query 14 | type: string 15 | required: true 16 | label: 17 | en_US: Query string 18 | zh_Hans: 查询语句 19 | human_description: 20 | en_US: The search query. 21 | zh_Hans: 搜索查询语句。 22 | llm_description: Key words for searching 23 | form: llm 24 | - name: max_results 25 | type: number 26 | required: true 27 | default: 5 28 | label: 29 | en_US: Max results 30 | zh_Hans: 最大结果数量 31 | form: form 32 | output: 33 | - name: text 34 | type: json 35 | human_description: 36 | en_US: Return result of DuckDuckGo search 37 | zh_Hans: DuckDuckGo 搜索的返回结果 38 | pt_BR: Return result of DuckDuckGo search -------------------------------------------------------------------------------- /core/tool/provider/builtin/maths/maths.py: -------------------------------------------------------------------------------- 1 | from core.tool.provider.builtin_tool_provider import BuiltinTool 2 | 3 | class MathsProvider(BuiltinTool): 4 | def __init__(self, credentials: dict): 5 | """ 6 | Initialize the MathsProvider with the given credentials. 7 | 8 | :param credentials: A dictionary containing authentication credentials. 9 | """ 10 | super().__init__(credentials) 11 | 12 | def validate(self) -> bool: 13 | """ 14 | Validate the credentials. 15 | 16 | :return: True if the credentials are valid, False otherwise. 17 | """ 18 | return True -------------------------------------------------------------------------------- /core/tool/provider/builtin/maths/maths.yaml: -------------------------------------------------------------------------------- 1 | identity: 2 | author: Bowen Liang 3 | name: maths 4 | label: 5 | en_US: Maths 6 | zh_Hans: 数学工具 7 | pt_BR: Maths 8 | description: 9 | en_US: A tool for maths. 10 | zh_Hans: 一个用于数学计算的工具。 11 | pt_BR: A tool for maths. 12 | icon: maths.svg 13 | tags: 14 | - utilities 15 | - productivity 16 | -------------------------------------------------------------------------------- /core/tool/provider/builtin/maths/tool/eval_expression.yaml: -------------------------------------------------------------------------------- 1 | identity: 2 | name: eval_expression 3 | author: Bowen Liang 4 | label: 5 | en_US: Evaluate Math Expression 6 | zh_Hans: 计算数学表达式 7 | pt_BR: Evaluate Math Expression 8 | description: 9 | human: 10 | en_US: A tool for evaluating an math expression, calculated locally with NumExpr. 11 | zh_Hans: 一个用于计算数学表达式的工具,表达式将通过NumExpr本地执行。 12 | pt_BR: A tool for evaluating an math expression, calculated locally with NumExpr. 13 | llm: A tool for evaluating an math expression. 14 | parameters: 15 | - name: expression 16 | type: string 17 | required: true 18 | label: 19 | en_US: Math Expression 20 | zh_Hans: 数学计算表达式 21 | pt_BR: Math Expression 22 | human_description: 23 | en_US: Math Expression 24 | zh_Hans: 数学计算表达式 25 | pt_BR: Math Expression 26 | form: llm 27 | output: 28 | - name: text 29 | type: string 30 | human_description: 31 | en_US: Math Returned result 32 | zh_Hans: 数学计算表达式 33 | pt_BR: Math Returned result 34 | -------------------------------------------------------------------------------- /core/tool/provider/builtin/stability/stability.py: -------------------------------------------------------------------------------- 1 | from core.tool.provider.builtin_tool_provider import BuiltinTool 2 | from core.tool.provider.builtin.stability.tool.base import BaseAuthorization 3 | 4 | class StabilityToolProvider(BuiltinTool, BaseAuthorization): 5 | """ 6 | This class is responsible for providing the stability tool. 7 | """ 8 | 9 | def __init__(self, credentials: dict): 10 | """ 11 | Initializes the StabilityToolProvider with the given credentials. 12 | 13 | :param credentials: A dictionary containing the credentials required for authorization. 14 | """ 15 | super().__init__(credentials) 16 | 17 | def validate(self) -> bool: 18 | """ 19 | Validates the credentials to ensure they are correct and authorized. 20 | 21 | :return: Returns True if the credentials are valid, otherwise raises an exception. 22 | """ 23 | self.sd_validate_credentials(self.credentials) 24 | return True -------------------------------------------------------------------------------- /core/tool/provider/builtin/stability/stability.yaml: -------------------------------------------------------------------------------- 1 | identity: 2 | author: NexusAI 3 | name: stability 4 | label: 5 | en_US: Stability 6 | zh_Hans: Stability 7 | pt_BR: Stability 8 | description: 9 | en_US: Activating humanity's potential through generative AI 10 | zh_Hans: 通过生成式 AI 激活人类的潜力 11 | pt_BR: Activating humanity's potential through generative AI 12 | icon: stability.svg 13 | credentials_for_provider: 14 | api_key: 15 | type: secret-input 16 | required: true 17 | label: 18 | en_US: API key 19 | zh_Hans: API key 20 | pt_BR: API key 21 | placeholder: 22 | en_US: Please input your API key 23 | zh_Hans: 请输入你的 API key 24 | pt_BR: Please input your API key 25 | help: 26 | en_US: Get your API key from Stability 27 | zh_Hans: 从 Stability 获取你的 API key 28 | pt_BR: Get your API key from Stability 29 | url: https://platform.stability.ai/account/keys 30 | -------------------------------------------------------------------------------- /core/tool/provider/builtin/webscraper/webscraper.py: -------------------------------------------------------------------------------- 1 | from core.tool.provider.builtin_tool_provider import BuiltinTool 2 | 3 | class WebscraperProvider(BuiltinTool): 4 | def __init__(self, credentials: dict): 5 | """ 6 | Initialize the WebscraperProvider with the given credentials. 7 | 8 | :param credentials: A dictionary containing authentication credentials. 9 | """ 10 | super().__init__(credentials) 11 | 12 | def validate(self) -> bool: 13 | """ 14 | Validate the credentials. 15 | 16 | :return: True if the credentials are valid, False otherwise. 17 | """ 18 | return True -------------------------------------------------------------------------------- /core/tool/provider/builtin/webscraper/webscraper.yaml: -------------------------------------------------------------------------------- 1 | identity: 2 | author: Dify 3 | name: webscraper 4 | label: 5 | en_US: WebScraper 6 | zh_Hans: 网页抓取 7 | pt_BR: WebScraper 8 | description: 9 | en_US: Web Scrapper tool kit is used to scrape web 10 | zh_Hans: 一个用于抓取网页的工具。 11 | pt_BR: Web Scrapper tool kit is used to scrape web 12 | icon: webscraper.svg 13 | tags: 14 | - productivity 15 | credentials_for_provider: 16 | -------------------------------------------------------------------------------- /core/vdb/__init__.py: -------------------------------------------------------------------------------- 1 | from .vector_database import GeneralVectorDatabase as VectorDatabase -------------------------------------------------------------------------------- /core/websocket/websocket_queue_pop.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import json 3 | from core.helper import pop_from_websocket_queue, get_websocket_queue_length 4 | from core.websocket.websocket_manager import get_ws_handler 5 | from log import Logger 6 | 7 | logger = Logger.get_logger('websocket') 8 | 9 | async def queue_processor(): 10 | while True: 11 | 12 | item = pop_from_websocket_queue() 13 | if item: 14 | # logger.info(f"Get Redis Data: {json.dumps(item)}") 15 | 16 | ws_handler = get_ws_handler() 17 | 18 | await ws_handler.send_data_to_user(json.dumps(item), item['user_id']) 19 | else: 20 | await asyncio.sleep(1) -------------------------------------------------------------------------------- /core/workflow/nodes/base/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import Node, Nodes, CURRENT_NODE_ID 2 | from .import_to_kb_base import ImportToKBBaseNode 3 | from .llm_base import LLMBaseNode 4 | from .sandbox_base import SandboxBaseNode 5 | 6 | __all__ = [ 7 | 'Node', 8 | 'Nodes', 9 | 'CURRENT_NODE_ID', 10 | 'ImportToKBBaseNode', 11 | 'LLMBaseNode', 12 | 'SandboxBaseNode' 13 | ] -------------------------------------------------------------------------------- /core/workflow/nodes/memory_interrupt.py: -------------------------------------------------------------------------------- 1 | from . import Node 2 | 3 | class MemoryInterruptNode(Node): 4 | """ 5 | A MemoryInterrupt object is used to interrupt memory during a workflow. 6 | """ 7 | 8 | def __init__(self, title, desc, interrupt_retrieval_memory, interrupt_conversation_memory, flow_data): 9 | """ 10 | Initializes a MemoryInterrupt object. 11 | """ 12 | super().__init__( 13 | "memory_interrupt", 14 | title=title, 15 | desc=desc, 16 | interrupt_retrieval_memory=interrupt_retrieval_memory, 17 | interrupt_conversation_memory=interrupt_conversation_memory, 18 | flow_data=flow_data 19 | ) -------------------------------------------------------------------------------- /docker/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/docker/__init__.py -------------------------------------------------------------------------------- /docker/multi_service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM continuumio/anaconda3:2024.02-1 2 | 3 | # Use network proxy as needed 4 | # ARG HTTP_PROXY=http://192.168.1.5:10809 5 | # ARG HTTPS_PROXY=http://192.168.1.5:10809 6 | 7 | COPY conda/nexus_ai.yml /tmp/nexus_ai.yml 8 | RUN conda env create -f /tmp/nexus_ai.yml --verbose && conda clean -afy && rm -rf /tmp/* 9 | RUN echo "conda activate nexus_ai" >> ~/.bashrc 10 | ENV PATH /opt/conda/envs/nexus_ai/bin:/opt/conda/bin:$PATH 11 | 12 | COPY api /NexusAI/api 13 | COPY core /NexusAI/core 14 | COPY docker/multi_service/init_admin_password.py /NexusAI/docker/multi_service/init_admin_password.py 15 | COPY docker/multi_service/migrations.py /NexusAI/docker/multi_service/migrations.py 16 | COPY docker/multi_service/import_documents_to_vdb.py /NexusAI/docker/multi_service/import_documents_to_vdb.py 17 | COPY docker/multi_service/supervisord.conf /etc/supervisord.conf 18 | COPY task /NexusAI/task 19 | COPY .env.template /NexusAI/.env 20 | COPY app.py /NexusAI/app.py 21 | COPY celery_app.py /NexusAI/celery_app.py 22 | COPY config.py /NexusAI/config.py 23 | COPY languages.py /NexusAI/languages.py 24 | COPY log.py /NexusAI/log.py 25 | COPY websocket.py /NexusAI/websocket.py 26 | 27 | WORKDIR /NexusAI 28 | 29 | CMD ["supervisord", "-c", "/etc/supervisord.conf"] 30 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20241224.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `tags` 2 | ADD COLUMN `user_id` INT(11) NOT NULL COMMENT 'User ID' AFTER `team_id`; -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20241225.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `app_runs` 2 | CHANGE COLUMN `ai_tool_type` `ai_tool_type` INT NOT NULL DEFAULT '0' COMMENT 'AI tool type 0: Regular APP (not an AI tool) 1: Agent generator 2: Skill generator 3: Round Table meeting summary generator 4: Round Table app target data generator' AFTER `type`; -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202412251711.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `tags` 2 | ADD INDEX `user_id` (`user_id`); -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250103.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE ai_tool_llm_records 2 | ADD COLUMN ai_tool_type INT NOT NULL DEFAULT '0' COMMENT 'AI tool type 1: Agent generator 2: Skill generator 3: Round Table meeting summary generator 4: Round Table app target data generator' 3 | AFTER app_run_id; 4 | 5 | ALTER TABLE ai_tool_llm_records 6 | ADD INDEX `ai_tool_type` (`ai_tool_type`); 7 | 8 | UPDATE ai_tool_llm_records r 9 | JOIN app_runs a ON r.app_run_id = a.id 10 | SET r.ai_tool_type = a.ai_tool_type; 11 | 12 | ALTER TABLE app_runs 13 | DROP COLUMN ai_tool_type; -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202501031448.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `ai_tool_llm_records` ADD `loop_count` INT NOT NULL DEFAULT '0' COMMENT 'The number of times the loop needs to continue running' AFTER `ai_tool_type`, ADD INDEX (`loop_count`); -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202501031711.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `ai_tool_llm_records` ADD `run_type` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Run type 1: First generation 2: Regeneration 3: AI correction 4: Batch generation' AFTER `ai_tool_type`, ADD INDEX (`run_type`); -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250105.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `ai_tool_llm_records` 2 | ADD COLUMN `loop_id` BIGINT NOT NULL DEFAULT '0' COMMENT 'Loop ID' AFTER `run_type`; 3 | 4 | ALTER TABLE `ai_tool_llm_records` 5 | ADD INDEX `loop_id` (`loop_id`); -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250106.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `ai_tool_llm_records` ADD `loop_limit` INT NOT NULL DEFAULT '0' COMMENT 'Loop Limit' AFTER `loop_id`, ADD INDEX (`loop_limit`); -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250108.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `chatroom_driven_records` ( 2 | `id` int NOT NULL COMMENT 'Record ID', 3 | `data_source_run_id` int NOT NULL COMMENT 'Data source run ID', 4 | `data_driven_run_id` int NOT NULL DEFAULT '0' COMMENT 'Data driven run ID' 5 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Chatroom Data Driven Record Data Table'; 6 | 7 | 8 | ALTER TABLE `chatroom_driven_records` 9 | ADD PRIMARY KEY (`id`), 10 | ADD KEY `data_source_run_id` (`data_source_run_id`), 11 | ADD KEY `data_driven_run_id` (`data_driven_run_id`); 12 | 13 | 14 | ALTER TABLE `chatroom_driven_records` 15 | MODIFY `id` int NOT NULL AUTO_INCREMENT COMMENT 'Record ID'; -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250109.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `chatroom_driven_records` 2 | ADD COLUMN `chatroom_id` INT(11) NOT NULL COMMENT 'Chatroom ID' AFTER `data_driven_run_id`; 3 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250112.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `ai_tool_llm_records` 2 | CHANGE COLUMN `ai_tool_type` `ai_tool_type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'AI tool type 1: Agent generator 2: Skill generator 3: Round Table meeting summary generator 4: Round Table app target data generator 5: See the batch agent example' AFTER `app_run_id`; 3 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250113.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `models` ADD `max_context_tokens` INT NOT NULL DEFAULT '0' COMMENT 'Max context tokens' AFTER `mode`, ADD `max_output_tokens` INT NOT NULL DEFAULT '0' COMMENT 'Max output tokens' AFTER `max_context_tokens`; 2 | UPDATE `models` SET `max_context_tokens` = '128000' WHERE `models`.`id` = 4; 3 | UPDATE `models` SET `max_output_tokens` = '16384' WHERE `models`.`id` = 4; 4 | UPDATE `models` SET `max_context_tokens` = '128000' WHERE `models`.`id` = 5; 5 | UPDATE `models` SET `max_output_tokens` = '16384' WHERE `models`.`id` = 5; 6 | UPDATE `models` SET `max_context_tokens` = '128000' WHERE `models`.`id` = 6; 7 | UPDATE `models` SET `max_output_tokens` = '4096' WHERE `models`.`id` = 6; 8 | UPDATE `models` SET `max_context_tokens` = '128000' WHERE `models`.`id` = 7; 9 | UPDATE `models` SET `max_output_tokens` = '4096' WHERE `models`.`id` = 7; 10 | UPDATE `models` SET `max_context_tokens` = '16385' WHERE `models`.`id` = 8; 11 | UPDATE `models` SET `max_output_tokens` = '4096' WHERE `models`.`id` = 8; -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250115.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `app_runs` 2 | ADD COLUMN `raw_user_prompt` MEDIUMTEXT NULL DEFAULT NULL COMMENT 'LLM raw user prompt' COLLATE 'utf8mb4_general_ci' AFTER `inputs`, 3 | ADD COLUMN `messages` LONGTEXT NULL DEFAULT NULL COMMENT 'Final LLM messages' COLLATE 'utf8mb4_bin' AFTER `raw_user_prompt`, 4 | ADD CONSTRAINT `app_runs_chk_8` CHECK (json_valid(`messages`)); -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250116.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `ai_tool_llm_records` ADD `user_prompt` TEXT NULL DEFAULT NULL COMMENT 'Prompt word filled in by the user' AFTER `inputs`; -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250119.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `apps` 2 | CHANGE COLUMN `description` `description` TEXT NULL DEFAULT NULL COMMENT 'App description' COLLATE 'utf8mb4_general_ci' AFTER `name`; -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250120.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `tags` CHANGE `created_time` `created_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Tag created time'; -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250122.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `ai_tool_llm_records` ADD `current_gen_count` INT NOT NULL DEFAULT '0' COMMENT 'The number of batches currently generated' AFTER `loop_count`; 2 | ALTER TABLE `ai_tool_llm_records` ADD INDEX(`current_gen_count`); -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/20250221.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `agent_chat_messages` ADD `ability_id` INT(11) NOT NULL DEFAULT '0' COMMENT 'Ability ID' AFTER `agent_id`; -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202502240943.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `chatrooms` ADD COLUMN `is_temporary` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Whether it is a temporary session 0: No, 1: Yes' AFTER `app_id`; 2 | ALTER TABLE `chatrooms` ADD INDEX(`is_temporary`); 3 | 4 | ALTER TABLE `datasets` ADD COLUMN `temporary_chatroom_id` int NOT NULL DEFAULT '0' COMMENT 'ID of the temporary chatroom, 0 means no temporary chatroom' AFTER `app_id`; 5 | ALTER TABLE `datasets` ADD INDEX(`temporary_chatroom_id`); -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202502271415.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO `models` (`id`, `supplier_id`, `name`, `type`, `mode`, `max_context_tokens`, `max_output_tokens`, `created_time`, `updated_time`, `status`) VALUES (23, 3, 'claude-3-7-sonnet-latest', 1, 1, 200000, 8192, '2025-02-20 17:07:18', NULL, 1); 2 | INSERT INTO `model_configurations` (`id`, `team_id`, `model_id`, `config`, `default_used`, `sort_order`, `created_time`, `updated_time`, `status`) VALUES (23, 1, 23, '{"model_name": "claude-3-7-sonnet-latest","max_tokens_to_sample": 8192,"temperature": null,"top_k": null,"top_p": null,"timeout": null,"max_retries": 2,"anthropic_api_url": null,"default_headers": null,"model_kwargs": {},"streaming": false}', 0, 95, '2025-02-20 17:07:18', '2025-02-27 14:07:03', 1); 3 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202503041538.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `rag_records` 2 | ADD COLUMN `agent_run_id` INT(11) NOT NULL DEFAULT '0' COMMENT 'Agent App run ID' AFTER `agent_id`, 3 | ADD COLUMN `workflow_run_id` INT(11) NOT NULL DEFAULT '0' COMMENT 'Workflow App run ID' AFTER `workflow_id`, 4 | ADD INDEX `agent_run_id` (`agent_run_id`), 5 | ADD INDEX `workflow_run_id` (`workflow_run_id`); 6 | 7 | ALTER TABLE `app_runs` 8 | ADD COLUMN `selected_ability_id` INT(11) NOT NULL DEFAULT '0' COMMENT 'Agent ability ID selected by the user' AFTER `raw_user_prompt`, 9 | ADD COLUMN `auto_match_ability` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Is auto match ability enabled for the Agent? 0: No 1: Yes' AFTER `selected_ability_id`, 10 | ADD COLUMN `matched_ability_id` INT(11) NOT NULL DEFAULT '0' COMMENT 'Agent ability ID matched by AI' AFTER `auto_match_ability`; 11 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202503041630.sql: -------------------------------------------------------------------------------- 1 | -- Add gpt-4.5-preview model 2 | INSERT INTO `models` (`id`, `supplier_id`, `name`, `type`, `mode`, `max_context_tokens`, `max_output_tokens`, `created_time`, `updated_time`, `status`) VALUES (24, '1', 'gpt-4.5-preview', '1', '1', '128000', '16384', CURRENT_TIMESTAMP, NULL, '1'); 3 | 4 | -- Add model configuration for gpt-4.5-preview 5 | INSERT INTO `model_configurations` (`id`, `team_id`, `model_id`, `config`, `default_used`, `sort_order`, `created_time`, `updated_time`, `status`) VALUES (24, '1', '24', '{\"n\": 1, \"stop\": null, \"model\": \"gpt-4.5-preview\", \"streaming\": false, \"max_tokens\": null, \"http_client\": null, \"max_retries\": 2, \"temperature\": 1, \"model_kwargs\": {}, \"openai_proxy\": null, \"default_query\": null, \"default_headers\": null, \"openai_api_base\": null, \"request_timeout\": null, \"http_async_client\": null, \"openai_organization\": null, \"tiktoken_model_name\": null}', '0', 91,CURRENT_TIMESTAMP, NULL, '1'); -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202503111704.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `chatroom_messages` 2 | ADD COLUMN `message_type` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Message type 0: Normal message 1: Speaker Selector message 2: Title Generator message' COLLATE 'utf8mb4_general_ci' AFTER `message`, 3 | ADD INDEX `message_type` (`message_type`); 4 | 5 | UPDATE `chatroom_messages` 6 | SET `message_type` = 1 7 | WHERE `user_id` = 0 AND `agent_id` = 0; 8 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202503131003.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `app_runs` 2 | ADD COLUMN `agent_run_type` TINYINT(1) NOT NULL DEFAULT '0' COMMENT 'Agent run type 0: Not an Agent 1: Agent chat 2: Run in a workflow 3: Chat in a Round Table 4: Guidance Execution of a Round Table' AFTER `type`, 3 | ADD INDEX `agent_run_type` (`agent_run_type`); 4 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202503131127.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `apps` 2 | ADD COLUMN `avatar` VARCHAR(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'App avatar image URL' AFTER `description`; -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202504101823.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS `agent_callable_items` ( 2 | `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID', 3 | `agent_id` int NOT NULL COMMENT 'Agent ID', 4 | `app_id` int NOT NULL COMMENT 'App ID (Skill or Workflow)', 5 | `item_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'Item type 1: Skill 2: Workflow', 6 | `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Created time', 7 | `updated_time` datetime DEFAULT NULL COMMENT 'Updated time', 8 | PRIMARY KEY (`id`), 9 | KEY `agent_id` (`agent_id`), 10 | KEY `app_id` (`app_id`), 11 | KEY `item_type` (`item_type`) 12 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Agent Callable Items Data Table'; 13 | 14 | CREATE TABLE IF NOT EXISTS `mcp_servers` ( 15 | `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID', 16 | `server_id` varchar(100) NOT NULL COMMENT 'MCP server unique identifier', 17 | `name` varchar(100) NOT NULL COMMENT 'MCP server name', 18 | `description` text COMMENT 'MCP server description', 19 | `doc_url` varchar(255) COMMENT 'Documentation URL', 20 | `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Created time', 21 | `updated_time` datetime DEFAULT NULL COMMENT 'Updated time', 22 | `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'Status 1: Normal 2: Disabled 3: Deleted', 23 | PRIMARY KEY (`id`), 24 | UNIQUE KEY `server_id` (`server_id`), 25 | KEY `status` (`status`) 26 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='MCP Servers Data Table'; -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202504150953.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `agent_chat_messages` 2 | ADD COLUMN `file_list` LONGTEXT NULL DEFAULT NULL COMMENT 'File list' COLLATE 'utf8mb4_bin' AFTER `message`, 3 | ADD COLUMN `file_content_list` LONGTEXT NULL DEFAULT NULL COMMENT 'Conent of each file in the file list' COLLATE 'utf8mb4_bin' AFTER `file_list`, 4 | ADD CONSTRAINT `agent_chat_messages_chk_1` CHECK (json_valid(`file_list`)), 5 | ADD CONSTRAINT `agent_chat_messages_chk_2` CHECK (json_valid(`file_content_list`)); 6 | 7 | ALTER TABLE `chatroom_messages` 8 | ADD COLUMN `file_list` LONGTEXT NULL DEFAULT NULL COMMENT 'File list' COLLATE 'utf8mb4_bin' AFTER `message`, 9 | ADD COLUMN `file_content_list` LONGTEXT NULL DEFAULT NULL COMMENT 'Conent of each file in the file list' COLLATE 'utf8mb4_bin' AFTER `file_list`, 10 | ADD CONSTRAINT `chatroom_messages_chk_3` CHECK (json_valid(`file_list`)), 11 | ADD CONSTRAINT `chatroom_messages_chk_4` CHECK (json_valid(`file_content_list`)); 12 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202504251614.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `documents` 2 | ADD COLUMN `text_split_config` LONGTEXT NULL COMMENT 'Text split configuration' AFTER `node_exec_id`, 3 | ADD CONSTRAINT `documents_chk_1` CHECK (json_valid(`text_split_config`)); 4 | 5 | UPDATE `dataset_process_rules` SET `config`='{"type": "RecursiveCharacterTextSplitter", "chunk_size": 4000, "chunk_overlap": 200, "keep_separator": false, "strip_whitespace": true}' WHERE `id`=1; 6 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202504271101.sql: -------------------------------------------------------------------------------- 1 | -- Add text-embedding-3-small and text-embedding-3-large models 2 | INSERT INTO `models` (`id`, `supplier_id`, `name`, `type`, `mode`, `max_context_tokens`, `max_output_tokens`, `support_image`, `created_time`, `updated_time`, `status`) VALUES (28, 1, 'text-embedding-3-small', 2, 1, 0, 0, 0, CURRENT_TIMESTAMP, NULL, 1); 3 | INSERT INTO `models` (`id`, `supplier_id`, `name`, `type`, `mode`, `max_context_tokens`, `max_output_tokens`, `support_image`, `created_time`, `updated_time`, `status`) VALUES (29, 1, 'text-embedding-3-large', 2, 1, 0, 0, 0, CURRENT_TIMESTAMP, NULL, 1); 4 | 5 | INSERT INTO `model_configurations` (`id`, `team_id`, `model_id`, `config`, `default_used`, `sort_order`, `created_time`, `updated_time`, `status`) VALUES (28, 1, 28, '{"type": "OpenAIEmbeddings", "model": "text-embedding-3-small", "max_retries": null, "input_pricing": 0.00000002, "request_timeout": null, "pricing_currency": "USD"}', 0, 99, CURRENT_TIMESTAMP, NULL, 1); 6 | INSERT INTO `model_configurations` (`id`, `team_id`, `model_id`, `config`, `default_used`, `sort_order`, `created_time`, `updated_time`, `status`) VALUES (29, 1, 29, '{"type": "OpenAIEmbeddings", "model": "text-embedding-3-large", "max_retries": null, "input_pricing": 0.00000013, "request_timeout": null, "pricing_currency": "USD"}', 0, 98, CURRENT_TIMESTAMP, NULL, 1); 7 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202505080957.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `app_runs` 2 | ADD COLUMN `chatroom_message_id` INT(11) NOT NULL DEFAULT '0' COMMENT 'Chatroom message ID' AFTER `chatroom_id`, 3 | ADD INDEX `chatroom_message_id` (`chatroom_message_id`); 4 | ALTER TABLE `chatroom_messages` 5 | DROP COLUMN `agent_run_id`; 6 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202505291353.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `chatrooms` 2 | ADD COLUMN `chat_agent_id` INT(11) NOT NULL DEFAULT '0' COMMENT 'ID of the Agent in Agent Chat mode' AFTER `app_id`, 3 | ADD INDEX `chat_agent_id` (`chat_agent_id`); 4 | -------------------------------------------------------------------------------- /docker/multi_service/db_migrations/202506051355.sql: -------------------------------------------------------------------------------- 1 | -- Add platform and openid fields to users table for third-party user login functionality 2 | ALTER TABLE `users` 3 | ADD COLUMN `platform` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'Third-party platform identifier' AFTER `language`, 4 | ADD COLUMN `openid` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'Third-party platform user openid' AFTER `platform`; 5 | 6 | -- Add individual indexes for platform and openid fields 7 | ALTER TABLE `users` 8 | ADD INDEX `idx_platform` (`platform`), 9 | ADD INDEX `idx_openid` (`openid`); -------------------------------------------------------------------------------- /docker/multi_service/vdb_migrations/0.json: -------------------------------------------------------------------------------- 1 | [ 2 | "Michael Brown-builtin-1734079638.docx", 3 | "Jane Doe-builtin-1734079639.docx", 4 | "Emily Johnson-builtin-1734079640.docx", 5 | "John Smith-builtin-1734079641.docx", 6 | "Technical terms-builtin-1734079699.txt", 7 | "Store platform activities-builtin-1734079713.txt", 8 | "After-sales support-builtin-1734079723.txt", 9 | "Logistics consulting-builtin-1734079737.txt", 10 | "Pre-sale of goods-builtin-1734079747.txt" 11 | ] -------------------------------------------------------------------------------- /docker/nginx/conf.d/default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name _; 4 | 5 | location / { 6 | proxy_pass http://web:9471; 7 | include http_proxy.conf; 8 | } 9 | 10 | location /v1 { 11 | proxy_pass http://multi_service:9472; 12 | include http_proxy.conf; 13 | } 14 | 15 | location /ws { 16 | proxy_pass http://multi_service:9473; 17 | include websocket_proxy.conf; 18 | } 19 | 20 | location /ws_chat { 21 | proxy_pass http://multi_service:9474; 22 | include websocket_proxy.conf; 23 | } 24 | 25 | location /sse { 26 | proxy_pass http://mcp_server:9475; 27 | include http_proxy.conf; 28 | } 29 | 30 | location /tool_icon { 31 | alias /app/tool_icon; 32 | 33 | if ($request_filename ~ "/$|/[^\.]+$") { 34 | return 403; 35 | } 36 | 37 | try_files $uri =404; 38 | } 39 | 40 | location /file { 41 | alias /app/storage; 42 | 43 | if ($request_filename ~ "/$|/[^\.]+$") { 44 | return 403; 45 | } 46 | 47 | add_header Content-Disposition "attachment"; 48 | 49 | try_files $uri =404; 50 | } 51 | 52 | location /upload { 53 | alias /app/upload_files; 54 | 55 | if ($request_filename ~ "/$|/[^\.]+$") { 56 | return 403; 57 | } 58 | 59 | try_files $uri =404; 60 | } 61 | } -------------------------------------------------------------------------------- /docker/nginx/http_proxy.conf: -------------------------------------------------------------------------------- 1 | proxy_set_header Host $host; 2 | proxy_set_header X-Real-IP $remote_addr; 3 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 4 | proxy_set_header X-Forwarded-Proto $scheme; 5 | proxy_buffering off; 6 | proxy_read_timeout 600s; 7 | proxy_send_timeout 600s; -------------------------------------------------------------------------------- /docker/nginx/websocket_proxy.conf: -------------------------------------------------------------------------------- 1 | proxy_http_version 1.1; 2 | proxy_set_header Upgrade $http_upgrade; 3 | proxy_set_header Connection "Upgrade"; 4 | proxy_set_header Host $host; 5 | proxy_set_header X-Real-IP $remote_addr; 6 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 7 | proxy_set_header X-Forwarded-Proto $scheme; 8 | proxy_cache_bypass $http_upgrade; 9 | proxy_no_cache $http_upgrade; 10 | proxy_buffering off; 11 | proxy_read_timeout 600s; 12 | proxy_send_timeout 600s; -------------------------------------------------------------------------------- /docker/sandbox/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.10.13 2 | 3 | # Use network proxy as needed 4 | # ARG HTTP_PROXY=http://192.168.1.5:10809 5 | # ARG HTTPS_PROXY=http://192.168.1.5:10809 6 | 7 | RUN apt-get update && apt-get install -y firejail 8 | 9 | RUN pip install --no-cache-dir fastapi uvicorn jinja2 10 | 11 | WORKDIR /docker/sandbox 12 | 13 | COPY ./api_server.py /docker/sandbox 14 | 15 | CMD ["python", "api_server.py"] -------------------------------------------------------------------------------- /docker/web/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:22.4.1 2 | 3 | # Use network proxy as needed 4 | # ARG HTTP_PROXY=http://192.168.1.5:10809 5 | # ARG HTTPS_PROXY=http://192.168.1.5:10809 6 | 7 | WORKDIR /NexusAI/web 8 | 9 | COPY web /NexusAI/web 10 | 11 | RUN npm install 12 | 13 | CMD ["npm", "run", "preview"] -------------------------------------------------------------------------------- /scripts/file_tool.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | def write_to_file(filepath: str, content: str, mode='w'): 4 | """ 5 | Write content to a file specified by filepath. 6 | 7 | Args: 8 | - filepath (str): The path to the file. 9 | - content (str): The content to write to the file. 10 | - mode (str, optional): The mode in which to open the file ('w' for write, 'a' for append). Default is 'w'. 11 | 12 | Returns: 13 | - dict: A dictionary indicating the status of the operation. 14 | {'status': 'True'} if successful, {'status': ''} if an exception occurred. 15 | """ 16 | try: 17 | storage_path = os.path.join('/storage', filepath) 18 | os.makedirs(os.path.dirname(storage_path), exist_ok=True) 19 | with open(storage_path, mode, encoding='utf-8') as file: 20 | file.write(content) 21 | return {'status': 'True'} 22 | except Exception as e: 23 | return {'status': str(e)} -------------------------------------------------------------------------------- /task/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/task/__init__.py -------------------------------------------------------------------------------- /task/chatroom_run.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import os 3 | import sys 4 | os.environ['DATABASE_AUTO_COMMIT'] = 'True' 5 | 6 | from pathlib import Path 7 | sys.path.append(str(Path(__file__).absolute().parent.parent)) 8 | 9 | from core.chatroom import ChatroomManager 10 | 11 | 12 | if __name__ == '__main__': 13 | 14 | if os.environ.get('CONDA_PREFIX'): 15 | os.environ['TESSDATA_PREFIX'] = os.environ['CONDA_PREFIX'] + '/share/tessdata' 16 | 17 | import nltk 18 | nltk.download('punkt') 19 | nltk.download('averaged_perceptron_tagger') 20 | 21 | 22 | event_loop = asyncio.new_event_loop() 23 | asyncio.set_event_loop(event_loop) 24 | manager = ChatroomManager(event_loop) 25 | event_loop.create_task(manager.start()) 26 | try: 27 | event_loop.run_forever() 28 | except KeyboardInterrupt: 29 | manager.stop() 30 | all_tasks = asyncio.all_tasks(event_loop) 31 | event_loop.run_until_complete(asyncio.gather(*all_tasks, return_exceptions=True)) 32 | event_loop.stop() 33 | event_loop.close() 34 | -------------------------------------------------------------------------------- /web/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [Makefile] 16 | indent_style = tab 17 | -------------------------------------------------------------------------------- /web/.eslintignore: -------------------------------------------------------------------------------- 1 | /lambda/ 2 | /scripts 3 | /config 4 | .history 5 | public 6 | dist 7 | .umi 8 | mock -------------------------------------------------------------------------------- /web/.eslintrc.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | module.exports = { 5 | extends: [require.resolve('@umijs/lint/dist/config/eslint')], 6 | globals: { 7 | page: true, 8 | REACT_APP_ENV: true, 9 | }, 10 | rules: { 11 | 'prettier/prettier': [ 12 | 'error', 13 | { 14 | tabWidth: 4, 15 | }, 16 | ], 17 | indent: ['error', 4], 18 | }, 19 | }; 20 | -------------------------------------------------------------------------------- /web/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | **/node_modules 5 | # roadhog-api-doc ignore 6 | /src/utils/request-temp.js 7 | _roadhog-api-doc 8 | .umi 9 | # production 10 | # /dist 11 | pnpm-lock.yaml 12 | # misc 13 | .DS_Store 14 | npm-debug.log* 15 | yarn-error.log 16 | 17 | /coverage 18 | .idea 19 | yarn.lock 20 | package-lock.json 21 | *bak 22 | .vscode 23 | 24 | 25 | # visual studio code 26 | .history 27 | *.log 28 | functions/* 29 | .temp/** 30 | 31 | # umi 32 | .umi 33 | .umi-production 34 | .umi-test 35 | 36 | # screenshot 37 | screenshot 38 | .firebase 39 | .eslintcache 40 | .cursorrules 41 | build 42 | -------------------------------------------------------------------------------- /web/.hintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "development" 4 | ], 5 | "hints": { 6 | "axe/text-alternatives": [ 7 | "default", 8 | { 9 | "image-alt": "off" 10 | } 11 | ] 12 | } 13 | } -------------------------------------------------------------------------------- /web/.prettierignore: -------------------------------------------------------------------------------- 1 | **/*.svg 2 | .umi 3 | .umi-production 4 | /dist 5 | .dockerignore 6 | .DS_Store 7 | .eslintignore 8 | *.png 9 | *.toml 10 | docker 11 | .editorconfig 12 | Dockerfile* 13 | .gitignore 14 | .prettierignore 15 | LICENSE 16 | .eslintcache 17 | *.lock 18 | yarn-error.log 19 | .history 20 | CNAME 21 | /build 22 | /public 23 | /dist_prod 24 | -------------------------------------------------------------------------------- /web/.prettierrc.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | module.exports = { 5 | singleQuote: true, 6 | trailingComma: 'all', 7 | printWidth: 100, 8 | tabWidth: 4, // 4 9 | useTabs: false, 10 | proseWrap: 'never', 11 | endOfLine: 'lf', 12 | overrides: [ 13 | { 14 | files: '.prettierrc', 15 | options: { 16 | parser: 'json', 17 | }, 18 | }, 19 | { 20 | files: 'document.ejs', 21 | options: { 22 | parser: 'html', 23 | }, 24 | }, 25 | ], 26 | 27 | arrowParens: 'avoid', 28 | }; 29 | -------------------------------------------------------------------------------- /web/config/defaultSettings.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { ProLayoutProps } from '@ant-design/pro-components'; 5 | 6 | /** 7 | * @name 8 | */ 9 | const Settings: ProLayoutProps & { 10 | pwa?: boolean; 11 | logo?: string; 12 | } = { 13 | navTheme: 'light', 14 | 15 | colorPrimary: '#1b64f3', 16 | 17 | layout: 'top', 18 | // contentWidth: 'Fixed', 19 | fixedHeader: false, 20 | footerRender: false, 21 | fixSiderbar: true, 22 | colorWeak: false, 23 | title: 'NEXUS AI', 24 | pwa: true, 25 | logo: '/logo.svg', 26 | iconfontUrl: '', 27 | token: { 28 | 29 | //https://procomponents.ant.design/components/layout#%E9%80%9A%E8%BF%87-token-%E4%BF%AE%E6%94%B9%E6%A0%B7%E5%BC%8F 30 | }, 31 | }; 32 | 33 | export default Settings; 34 | -------------------------------------------------------------------------------- /web/config/envConfig.ts.template: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | export default { 5 | dev: { 6 | API_URL: 'http://127.0.0.1:9472', 7 | WS_URL: 'ws://127.0.0.1:9473/ws', 8 | CHAT_URL: 'ws://127.0.0.1:9474', 9 | OUTPUT_PATH: 'dist', 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /web/config/oneapi.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | 4 | } 5 | -------------------------------------------------------------------------------- /web/config/proxy.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | export default { 5 | test: { 6 | '/api/': { 7 | target: 'https://proapi.azurewebsites.net', 8 | changeOrigin: true, 9 | pathRewrite: { '^': '' }, 10 | }, 11 | }, 12 | pre: { 13 | '/api/': { 14 | target: 'your pre url', 15 | changeOrigin: true, 16 | pathRewrite: { '^': '' }, 17 | }, 18 | }, 19 | }; 20 | -------------------------------------------------------------------------------- /web/dist/390.41467286.async.js: -------------------------------------------------------------------------------- 1 | "use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[390],{96390:function(o,n,t){t.r(n),t.d(n,{default:function(){return E}});var O=t(67294),u=t(35312),s=t(85893);function E(){var e=(0,u.useOutletContext)();return(0,s.jsx)(u.Outlet,{context:e})}}}]); 2 | -------------------------------------------------------------------------------- /web/dist/CNAME: -------------------------------------------------------------------------------- 1 | preview.pro.ant.design -------------------------------------------------------------------------------- /web/dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/dist/favicon.ico -------------------------------------------------------------------------------- /web/dist/icons/add_blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /web/dist/icons/add_white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/dist/icons/age222nt_1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/dist/icons/arrow-clockwise.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/dist/icons/arrow-counterclockwise.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/dist/icons/edit_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | biaji 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /web/dist/icons/edit_icon_1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /web/dist/icons/journal-text.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/dist/icons/justify.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/dist/icons/llm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | LLM 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /web/dist/icons/number.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/dist/icons/plaza_add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /web/dist/icons/text-center.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/dist/icons/text-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/dist/icons/text-paragraph.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/dist/icons/text-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/dist/icons/text.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/dist/icons/type-bold.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/dist/icons/type-italic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/dist/icons/type-strikethrough.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/dist/icons/type-underline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/dist/icons/uptxt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /web/dist/icons/uptxt_select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /web/dist/images/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /web/dist/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/dist/images/bg.png -------------------------------------------------------------------------------- /web/dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Nexus Ai 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /web/dist/p__404.b23b9363.async.js: -------------------------------------------------------------------------------- 1 | "use strict";(self.webpackChunkant_design_pro=self.webpackChunkant_design_pro||[]).push([[571],{9826:function(o,s,t){t.r(s);var n=t(35312),u=t(29905),_=t(28036),E=t(67294),a=t(85893),e=function(){return(0,a.jsx)(u.ZP,{status:"404",title:"404",subTitle:(0,n.useIntl)().formatMessage({id:"pages.404.subTitle"}),extra:(0,a.jsx)(_.ZP,{type:"primary",onClick:function(){return n.history.push("/")},children:(0,n.useIntl)().formatMessage({id:"pages.404.buttonText"})})})};s.default=e}}]); 2 | -------------------------------------------------------------------------------- /web/dist/p__Plaza__ChatRoom__index.5b770993.chunk.css: -------------------------------------------------------------------------------- 1 | pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-keyword,.hljs-formula{color:#c678dd}.hljs-section,.hljs-name,.hljs-selector-tag,.hljs-deletion,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string{color:#98c379}.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-type,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-number{color:#d19a66}.hljs-symbol,.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-title.class_,.hljs-class .hljs-title{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} 2 | -------------------------------------------------------------------------------- /web/dist/p__WorkSpace__index.b444d0fb.chunk.css: -------------------------------------------------------------------------------- 1 | .user-prolist .ant-list-split{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important;height:calc(100vh - 160px)!important}.user-prolist .ant-list-split .ant-spin-nested-loading{-webkit-box-flex:1!important;-ms-flex:1 1!important;flex:1 1!important;overflow-y:auto!important} 2 | -------------------------------------------------------------------------------- /web/dist/pro_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/dist/t__plugin-layout__Layout.9fc5ee3f.chunk.css: -------------------------------------------------------------------------------- 1 | @media screen and (max-width: 480px){.umi-plugin-layout-container{width:100%!important}.umi-plugin-layout-container>*{border-radius:0!important}}.umi-plugin-layout-menu .anticon{margin-right:8px}.umi-plugin-layout-menu .ant-dropdown-menu-item{min-width:160px}.umi-plugin-layout-right{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;float:right;height:100%;margin-left:auto;overflow:hidden}.umi-plugin-layout-right .umi-plugin-layout-action{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%;padding:0 12px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.umi-plugin-layout-right .umi-plugin-layout-action>i{color:#ffffffd9;vertical-align:middle}.umi-plugin-layout-right .umi-plugin-layout-action:hover,.umi-plugin-layout-right .umi-plugin-layout-action.opened{background:#00000006}.umi-plugin-layout-right .umi-plugin-layout-search{padding:0 12px}.umi-plugin-layout-right .umi-plugin-layout-search:hover{background:transparent}.umi-plugin-layout-name{margin-left:8px}.umi-plugin-layout-name.umi-plugin-layout-hide-avatar-img{margin-left:0} 2 | -------------------------------------------------------------------------------- /web/dist/vs/base/browser/ui/codicons/codicon/codicon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/dist/vs/base/browser/ui/codicons/codicon/codicon.ttf -------------------------------------------------------------------------------- /web/dist/vs/base/common/worker/simpleWorker.nls.de.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.de",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["Array","Boolescher Wert","Klasse","Konstante","Konstruktor","Enumeration","Enumerationsmember","Ereignis","Feld","Datei","Funktion","Schnittstelle","Schl\xFCssel","Methode","Modul","Namespace","NULL","Zahl","Objekt","Operator","Paket","Eigenschaft","Zeichenfolge","Struktur","Typparameter","Variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.de.js.map -------------------------------------------------------------------------------- /web/dist/vs/base/common/worker/simpleWorker.nls.es.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.es",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["matriz","booleano","clase","constante","constructor","enumeraci\xF3n","miembro de la enumeraci\xF3n","evento","campo","archivo","funci\xF3n","interfaz","clave","m\xE9todo","m\xF3dulo","espacio de nombres","NULL","n\xFAmero","objeto","operador","paquete","propiedad","cadena","estructura","par\xE1metro de tipo","variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.es.js.map -------------------------------------------------------------------------------- /web/dist/vs/base/common/worker/simpleWorker.nls.fr.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.fr",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["tableau","bool\xE9en","classe","constante","constructeur","\xE9num\xE9ration","membre d'\xE9num\xE9ration","\xE9v\xE9nement","champ","fichier","fonction","interface","cl\xE9","m\xE9thode","module","espace de noms","NULL","nombre","objet","op\xE9rateur","package","propri\xE9t\xE9","cha\xEEne","struct","param\xE8tre de type","variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.fr.js.map -------------------------------------------------------------------------------- /web/dist/vs/base/common/worker/simpleWorker.nls.it.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.it",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["matrice","valore booleano","classe","costante","costruttore","enumerazione","membro di enumerazione","evento","campo","file","funzione","interfaccia","chiave","metodo","modulo","spazio dei nomi","Null","numero","oggetto","operatore","pacchetto","propriet\xE0","stringa","struct","parametro di tipo","variabile","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.it.js.map -------------------------------------------------------------------------------- /web/dist/vs/base/common/worker/simpleWorker.nls.ja.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ja",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u914D\u5217","\u30D6\u30FC\u30EB\u5024","\u30AF\u30E9\u30B9","\u5B9A\u6570","\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u30FC","\u5217\u6319\u578B","\u5217\u6319\u578B\u30E1\u30F3\u30D0\u30FC","\u30A4\u30D9\u30F3\u30C8","\u30D5\u30A3\u30FC\u30EB\u30C9","\u30D5\u30A1\u30A4\u30EB","\u95A2\u6570","\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9","\u30AD\u30FC","\u30E1\u30BD\u30C3\u30C9","\u30E2\u30B8\u30E5\u30FC\u30EB","\u540D\u524D\u7A7A\u9593","NULL","\u6570\u5024","\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8","\u6F14\u7B97\u5B50","\u30D1\u30C3\u30B1\u30FC\u30B8","\u30D7\u30ED\u30D1\u30C6\u30A3","\u6587\u5B57\u5217","\u69CB\u9020\u4F53","\u578B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC","\u5909\u6570","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.ja.js.map -------------------------------------------------------------------------------- /web/dist/vs/base/common/worker/simpleWorker.nls.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["array","boolean","class","constant","constructor","enumeration","enumeration member","event","field","file","function","interface","key","method","module","namespace","null","number","object","operator","package","property","string","struct","type parameter","variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.js.map -------------------------------------------------------------------------------- /web/dist/vs/base/common/worker/simpleWorker.nls.ko.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ko",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\uBC30\uC5F4","\uBD80\uC6B8","\uD074\uB798\uC2A4","\uC0C1\uC218","\uC0DD\uC131\uC790","\uC5F4\uAC70\uD615","\uC5F4\uAC70\uD615 \uBA64\uBC84","\uC774\uBCA4\uD2B8","\uD544\uB4DC","\uD30C\uC77C","\uD568\uC218","\uC778\uD130\uD398\uC774\uC2A4","\uD0A4","\uBA54\uC11C\uB4DC","\uBAA8\uB4C8","\uB124\uC784\uC2A4\uD398\uC774\uC2A4","Null","\uC22B\uC790","\uAC1C\uCCB4","\uC5F0\uC0B0\uC790","\uD328\uD0A4\uC9C0","\uC18D\uC131","\uBB38\uC790\uC5F4","\uAD6C\uC870\uCCB4","\uD615\uC2DD \uB9E4\uAC1C \uBCC0\uC218","\uBCC0\uC218","{0}({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.ko.js.map -------------------------------------------------------------------------------- /web/dist/vs/base/common/worker/simpleWorker.nls.zh-cn.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.zh-cn",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u6570\u7EC4","\u5E03\u5C14\u503C","\u7C7B","\u5E38\u6570","\u6784\u9020\u51FD\u6570","\u679A\u4E3E","\u679A\u4E3E\u6210\u5458","\u4E8B\u4EF6","\u5B57\u6BB5","\u6587\u4EF6","\u51FD\u6570","\u63A5\u53E3","\u952E","\u65B9\u6CD5","\u6A21\u5757","\u547D\u540D\u7A7A\u95F4","Null","\u6570\u5B57","\u5BF9\u8C61","\u8FD0\u7B97\u7B26","\u5305","\u5C5E\u6027","\u5B57\u7B26\u4E32","\u7ED3\u6784","\u7C7B\u578B\u53C2\u6570","\u53D8\u91CF","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.zh-cn.js.map -------------------------------------------------------------------------------- /web/dist/vs/base/common/worker/simpleWorker.nls.zh-tw.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.zh-tw",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u9663\u5217","\u5E03\u6797\u503C","\u985E\u5225","\u5E38\u6578","\u5EFA\u69CB\u51FD\u5F0F","\u5217\u8209","\u5217\u8209\u6210\u54E1","\u4E8B\u4EF6","\u6B04\u4F4D","\u6A94\u6848","\u51FD\u5F0F","\u4ECB\u9762","\u7D22\u5F15\u9375","\u65B9\u6CD5","\u6A21\u7D44","\u547D\u540D\u7A7A\u9593","null","\u6578\u5B57","\u7269\u4EF6","\u904B\u7B97\u5B50","\u5957\u4EF6","\u5C6C\u6027","\u5B57\u4E32","\u7D50\u69CB","\u578B\u5225\u53C3\u6578","\u8B8A\u6578","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.zh-tw.js.map -------------------------------------------------------------------------------- /web/ex.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/ex.ts -------------------------------------------------------------------------------- /web/jest.config.ts: -------------------------------------------------------------------------------- 1 | import { configUmiAlias, createConfig } from '@umijs/max/test'; 2 | 3 | export default async () => { 4 | const config = await configUmiAlias({ 5 | ...createConfig({ 6 | target: 'browser', 7 | }), 8 | }); 9 | console.log(JSON.stringify(config)); 10 | 11 | return { 12 | ...config, 13 | testEnvironmentOptions: { 14 | ...(config?.testEnvironmentOptions || {}), 15 | url: 'http://localhost:8000', 16 | }, 17 | setupFiles: [...(config.setupFiles || []), './tests/setupTests.jsx'], 18 | globals: { 19 | ...config.globals, 20 | localStorage: null, 21 | }, 22 | }; 23 | }; 24 | -------------------------------------------------------------------------------- /web/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "jsx": "react-jsx", 4 | "emitDecoratorMetadata": true, 5 | "experimentalDecorators": true, 6 | "baseUrl": ".", 7 | "paths": { 8 | "@/*": ["./src/*"] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /web/mock/route.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | '/api/auth_routes': { 3 | '/form/advanced-form': { authority: ['admin', 'user'] }, 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /web/postcss.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | module.exports = { 5 | plugins: { 6 | tailwindcss: {}, 7 | autoprefixer: {}, 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /web/public/CNAME: -------------------------------------------------------------------------------- 1 | preview.pro.ant.design -------------------------------------------------------------------------------- /web/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/public/favicon.ico -------------------------------------------------------------------------------- /web/public/icons/add_blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /web/public/icons/add_white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/public/icons/age222nt_1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/public/icons/arrow-clockwise.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/public/icons/arrow-counterclockwise.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/public/icons/edit_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | biaji 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /web/public/icons/edit_icon_1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /web/public/icons/journal-text.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/public/icons/justify.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/public/icons/llm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | LLM 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /web/public/icons/number.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/public/icons/plaza_add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /web/public/icons/text-center.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/public/icons/text-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/public/icons/text-paragraph.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/public/icons/text-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/public/icons/text.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/public/icons/type-bold.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/public/icons/type-italic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/public/icons/type-strikethrough.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/public/icons/type-underline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/public/icons/uptxt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /web/public/icons/uptxt_select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /web/public/images/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /web/public/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/public/images/bg.png -------------------------------------------------------------------------------- /web/public/pro_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/public/vs/base/browser/ui/codicons/codicon/codicon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/public/vs/base/browser/ui/codicons/codicon/codicon.ttf -------------------------------------------------------------------------------- /web/public/vs/base/common/worker/simpleWorker.nls.de.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.de",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["Array","Boolescher Wert","Klasse","Konstante","Konstruktor","Enumeration","Enumerationsmember","Ereignis","Feld","Datei","Funktion","Schnittstelle","Schl\xFCssel","Methode","Modul","Namespace","NULL","Zahl","Objekt","Operator","Paket","Eigenschaft","Zeichenfolge","Struktur","Typparameter","Variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.de.js.map -------------------------------------------------------------------------------- /web/public/vs/base/common/worker/simpleWorker.nls.es.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.es",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["matriz","booleano","clase","constante","constructor","enumeraci\xF3n","miembro de la enumeraci\xF3n","evento","campo","archivo","funci\xF3n","interfaz","clave","m\xE9todo","m\xF3dulo","espacio de nombres","NULL","n\xFAmero","objeto","operador","paquete","propiedad","cadena","estructura","par\xE1metro de tipo","variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.es.js.map -------------------------------------------------------------------------------- /web/public/vs/base/common/worker/simpleWorker.nls.fr.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.fr",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["tableau","bool\xE9en","classe","constante","constructeur","\xE9num\xE9ration","membre d'\xE9num\xE9ration","\xE9v\xE9nement","champ","fichier","fonction","interface","cl\xE9","m\xE9thode","module","espace de noms","NULL","nombre","objet","op\xE9rateur","package","propri\xE9t\xE9","cha\xEEne","struct","param\xE8tre de type","variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.fr.js.map -------------------------------------------------------------------------------- /web/public/vs/base/common/worker/simpleWorker.nls.it.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.it",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["matrice","valore booleano","classe","costante","costruttore","enumerazione","membro di enumerazione","evento","campo","file","funzione","interfaccia","chiave","metodo","modulo","spazio dei nomi","Null","numero","oggetto","operatore","pacchetto","propriet\xE0","stringa","struct","parametro di tipo","variabile","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.it.js.map -------------------------------------------------------------------------------- /web/public/vs/base/common/worker/simpleWorker.nls.ja.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ja",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u914D\u5217","\u30D6\u30FC\u30EB\u5024","\u30AF\u30E9\u30B9","\u5B9A\u6570","\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u30FC","\u5217\u6319\u578B","\u5217\u6319\u578B\u30E1\u30F3\u30D0\u30FC","\u30A4\u30D9\u30F3\u30C8","\u30D5\u30A3\u30FC\u30EB\u30C9","\u30D5\u30A1\u30A4\u30EB","\u95A2\u6570","\u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9","\u30AD\u30FC","\u30E1\u30BD\u30C3\u30C9","\u30E2\u30B8\u30E5\u30FC\u30EB","\u540D\u524D\u7A7A\u9593","NULL","\u6570\u5024","\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8","\u6F14\u7B97\u5B50","\u30D1\u30C3\u30B1\u30FC\u30B8","\u30D7\u30ED\u30D1\u30C6\u30A3","\u6587\u5B57\u5217","\u69CB\u9020\u4F53","\u578B\u30D1\u30E9\u30E1\u30FC\u30BF\u30FC","\u5909\u6570","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.ja.js.map -------------------------------------------------------------------------------- /web/public/vs/base/common/worker/simpleWorker.nls.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["array","boolean","class","constant","constructor","enumeration","enumeration member","event","field","file","function","interface","key","method","module","namespace","null","number","object","operator","package","property","string","struct","type parameter","variable","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.js.map -------------------------------------------------------------------------------- /web/public/vs/base/common/worker/simpleWorker.nls.ko.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.ko",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\uBC30\uC5F4","\uBD80\uC6B8","\uD074\uB798\uC2A4","\uC0C1\uC218","\uC0DD\uC131\uC790","\uC5F4\uAC70\uD615","\uC5F4\uAC70\uD615 \uBA64\uBC84","\uC774\uBCA4\uD2B8","\uD544\uB4DC","\uD30C\uC77C","\uD568\uC218","\uC778\uD130\uD398\uC774\uC2A4","\uD0A4","\uBA54\uC11C\uB4DC","\uBAA8\uB4C8","\uB124\uC784\uC2A4\uD398\uC774\uC2A4","Null","\uC22B\uC790","\uAC1C\uCCB4","\uC5F0\uC0B0\uC790","\uD328\uD0A4\uC9C0","\uC18D\uC131","\uBB38\uC790\uC5F4","\uAD6C\uC870\uCCB4","\uD615\uC2DD \uB9E4\uAC1C \uBCC0\uC218","\uBCC0\uC218","{0}({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.ko.js.map -------------------------------------------------------------------------------- /web/public/vs/base/common/worker/simpleWorker.nls.zh-cn.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.zh-cn",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u6570\u7EC4","\u5E03\u5C14\u503C","\u7C7B","\u5E38\u6570","\u6784\u9020\u51FD\u6570","\u679A\u4E3E","\u679A\u4E3E\u6210\u5458","\u4E8B\u4EF6","\u5B57\u6BB5","\u6587\u4EF6","\u51FD\u6570","\u63A5\u53E3","\u952E","\u65B9\u6CD5","\u6A21\u5757","\u547D\u540D\u7A7A\u95F4","Null","\u6570\u5B57","\u5BF9\u8C61","\u8FD0\u7B97\u7B26","\u5305","\u5C5E\u6027","\u5B57\u7B26\u4E32","\u7ED3\u6784","\u7C7B\u578B\u53C2\u6570","\u53D8\u91CF","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.zh-cn.js.map -------------------------------------------------------------------------------- /web/public/vs/base/common/worker/simpleWorker.nls.zh-tw.js: -------------------------------------------------------------------------------- 1 | /*!----------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) 4 | * Released under the MIT license 5 | * https://github.com/microsoft/vscode/blob/main/LICENSE.txt 6 | *-----------------------------------------------------------*/define("vs/base/common/worker/simpleWorker.nls.zh-tw",{"vs/base/common/platform":["_"],"vs/editor/common/languages":["\u9663\u5217","\u5E03\u6797\u503C","\u985E\u5225","\u5E38\u6578","\u5EFA\u69CB\u51FD\u5F0F","\u5217\u8209","\u5217\u8209\u6210\u54E1","\u4E8B\u4EF6","\u6B04\u4F4D","\u6A94\u6848","\u51FD\u5F0F","\u4ECB\u9762","\u7D22\u5F15\u9375","\u65B9\u6CD5","\u6A21\u7D44","\u547D\u540D\u7A7A\u9593","null","\u6578\u5B57","\u7269\u4EF6","\u904B\u7B97\u5B50","\u5957\u4EF6","\u5C6C\u6027","\u5B57\u4E32","\u7D50\u69CB","\u578B\u5225\u53C3\u6578","\u8B8A\u6578","{0} ({1})"]}); 7 | 8 | //# sourceMappingURL=../../../../../min-maps/vs/base/common/worker/simpleWorker.nls.zh-tw.js.map -------------------------------------------------------------------------------- /web/src/access.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @see https://umijs.org/docs/max/access#access 3 | * */ 4 | export default function access(initialState: { currentUser?: API.CurrentUser } | undefined) { 5 | const { currentUser } = initialState ?? {}; 6 | return { 7 | canAdmin: currentUser && currentUser.access === 'admin', 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /web/src/api/setting.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import aniRequest from './request'; 5 | 6 | // Get model list 7 | export const getSuppliersList = async () => { 8 | return await aniRequest('/v1/supplier/suppliers_list', { method: 'GET' }); 9 | }; 10 | 11 | // Supplier approves a single model setting 12 | export const postSuppliersAuthorize = async (data: any) => { 13 | const res = await aniRequest('/v1/supplier/supplier_authorize', { 14 | method: 'POST', 15 | data: data, 16 | }); 17 | return res; 18 | }; 19 | 20 | // Supplier approves multiple model settings 21 | export const postSwitchingModels = async (data: any) => { 22 | const res = await aniRequest('/v1/supplier/switching_models', { 23 | method: 'POST', 24 | data: data, 25 | }); 26 | return res; 27 | }; -------------------------------------------------------------------------------- /web/src/api/skill.ts: -------------------------------------------------------------------------------- 1 | import aniRequest from './request'; 2 | 3 | const skill_info = '/v1/skill/skill_info/'; // Get skill card detail information {app_id} Status publish_status 0/1 4 | const skill_update = '/v1/skill/skill_update/'; // Update skill card information {app_id} 5 | const skill_publish = '/v1/skill/skill_publish/'; // Publish skill card information {app_id} 6 | const skill_run = '/v1/skill/skill_run'; // Delete skill card information 7 | 8 | export const GetskillInfo = async (app_id: any, publish_status?: any) => { 9 | const res = await aniRequest(`${skill_info}${app_id}`, { 10 | method: 'GET', 11 | data: { publish_status: publish_status == 'true' ? 1 : 0 }, 12 | }); 13 | return res; 14 | }; 15 | 16 | export const PutskillUpdate = async (data: any) => { 17 | const res = await aniRequest(`${skill_update}${data.app_id}`, { 18 | method: 'PUT', 19 | data: data.data, 20 | }); 21 | return res; 22 | }; 23 | 24 | export const PutskillPublish = async (app_id: any) => { 25 | const res = await aniRequest(`${skill_publish}${app_id}`, { method: 'PUT' }); 26 | return res; 27 | }; 28 | 29 | export const PostskillRun = async (data: any) => { 30 | const res = await aniRequest(`${skill_run}`, { method: 'POST', data: data }); 31 | return res; 32 | }; -------------------------------------------------------------------------------- /web/src/api/team.ts: -------------------------------------------------------------------------------- 1 | import aniRequest from './request'; 2 | 3 | // Get team list 4 | export const getTeamList = async () => { 5 | return await aniRequest(`/v1/auth/team_member_list`, { method: 'GET' }); 6 | }; 7 | 8 | // Generate invitation link 9 | export const postInviteUser = async (data: any) => { 10 | return await aniRequest(`/v1/auth/invite_user`, { method: 'POST', data: data }); 11 | }; 12 | 13 | // Register invited user account 14 | export const postRegisterUser = async (data: any) => { 15 | return await aniRequest(`/v1/auth/register_user`, { method: 'POST', data: data }); 16 | }; -------------------------------------------------------------------------------- /web/src/components/ChatAvatar.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { headportrait } from '@/utils/useUser'; 5 | import React, { memo } from 'react'; 6 | 7 | interface params { 8 | width?: string; 9 | bg?: string; 10 | rounded?: string; 11 | data?: any; 12 | imgWidth?: string; 13 | background?: string; 14 | } 15 | 16 | const AvatarContent: React.FC = param => { 17 | let { width = "40px", bg = "#F4F8F1", rounded = "6px", data, imgWidth = '18px', background } = param; 18 | if (data?.avatar) { 19 | imgWidth = width; 20 | } 21 | 22 | const bgColor = background || bg; 23 | 24 | return ( 25 |
31 | 40 |
41 | ); 42 | }; 43 | 44 | export default memo(AvatarContent); 45 | -------------------------------------------------------------------------------- /web/src/components/Footer/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import React from 'react'; 5 | 6 | interface FooterProps { 7 | className?: any; 8 | } 9 | 10 | const Footer: React.FC = props => { 11 | let { className = '' } = props; 12 | // news 13 | return ( 14 |
18 |
version 0.0.1-alpha.1
19 |
20 | ); 21 | }; 22 | 23 | export default Footer; 24 | -------------------------------------------------------------------------------- /web/src/components/HeaderDropdown/index.tsx: -------------------------------------------------------------------------------- 1 | import { Dropdown } from 'antd'; 2 | import { createStyles } from 'antd-style'; 3 | import type { DropDownProps } from 'antd/es/dropdown'; 4 | import classNames from 'classnames'; 5 | import React from 'react'; 6 | 7 | const useStyles = createStyles(({ token }) => { 8 | return { 9 | dropdown: { 10 | [`@media screen and (max-width: ${token.screenXS}px)`]: { 11 | width: '100%', 12 | }, 13 | }, 14 | }; 15 | }); 16 | 17 | export type HeaderDropdownProps = { 18 | overlayClassName?: string; 19 | placement?: 20 | | 'bottomLeft' 21 | | 'bottomRight' 22 | | 'topLeft' 23 | | 'topCenter' 24 | | 'topRight' 25 | | 'bottomCenter'; 26 | } & Omit; 27 | 28 | const HeaderDropdown: React.FC = ({ overlayClassName: cls, ...restProps }) => { 29 | const { styles } = useStyles(); 30 | return ; 31 | }; 32 | 33 | export default HeaderDropdown; 34 | -------------------------------------------------------------------------------- /web/src/components/RightContent/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { setLang } from '@/api/workflow'; 5 | import { QuestionCircleOutlined } from '@ant-design/icons'; 6 | import { setLocale, SelectLang as UmiSelectLang } from '@umijs/max'; 7 | 8 | 9 | 10 | const LangIconLoaded = () => ; 11 | 12 | export const SelectLang = () => { 13 | return ( 14 | } 16 | style={{ 17 | padding: 4, 18 | }} 19 | onItemClick={e => { 20 | setLang(e.key === 'zh-CN' ? 'zh' : 'en').then(res => { 21 | setLocale(e.key); 22 | }); 23 | return true; 24 | }} 25 | /> 26 | ); 27 | }; 28 | 29 | export const Question = () => { 30 | return ( 31 |
{}} 37 | > 38 | 39 |
40 | ); 41 | }; 42 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/UserCon.tsx: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/AniSwitch.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { Switch } from 'antd'; 5 | import React, { memo } from 'react'; 6 | 7 | interface Props extends Partial> { 8 | className?: string; 9 | label?: string; 10 | } 11 | 12 | const AniSwitch = memo((props: Props) => { 13 | const { className, label, ...restProps } = props; 14 | return ( 15 |
16 | {label} 17 | {label && ':'} 18 | 19 |
20 | ); 21 | }); 22 | 23 | export default AniSwitch; 24 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/DealtWith/components/utils.ts: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | 3 | export const flattenObjectProperties = (obj: any) => { 4 | if (!obj || obj.type !== 'object' || !obj.properties) { 5 | return [obj]; 6 | } 7 | 8 | const result: any[] = []; 9 | 10 | const flatten = (item: any, parentKey = '') => { 11 | _.forOwn(item, (value, key) => { 12 | const newKey = parentKey ? `${parentKey}.${key}` : key; 13 | if (value.type === 'object' && value.properties) { 14 | flatten(value.properties, newKey); 15 | } else { 16 | result.push({ ...value, name: newKey }); 17 | } 18 | }); 19 | }; 20 | 21 | flatten(obj.properties); 22 | return result; 23 | }; -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/DealtWith/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import useSocketStore from '@/store/websocket'; 5 | import { memo } from 'react'; 6 | import DealtWith from './components'; 7 | 8 | interface DealtWithNewProps { 9 | onSubmit?: (execId: string) => void; 10 | onClose?: () => void; 11 | } 12 | 13 | /** 14 | * 优化版的DealtWith组件 15 | * 使用更清晰的组件结构和逻辑分离 16 | */ 17 | export default memo(({ onSubmit, onClose }: DealtWithNewProps) => { 18 | return ; 19 | }); 20 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/Editor/ExampleTheme.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Meta Platforms, Inc. and affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | * 7 | */ 8 | export default { 9 | code: 'editor-code', 10 | heading: { 11 | h1: 'editor-heading-h1', 12 | h2: 'editor-heading-h2', 13 | h3: 'editor-heading-h3', 14 | h4: 'editor-heading-h4', 15 | h5: 'editor-heading-h5', 16 | }, 17 | image: 'editor-image', 18 | link: 'editor-link', 19 | list: { 20 | listitem: 'editor-listitem', 21 | nested: { 22 | listitem: 'editor-nested-listitem', 23 | }, 24 | ol: 'editor-list-ol', 25 | ul: 'editor-list-ul', 26 | }, 27 | ltr: 'ltr', 28 | paragraph: 'editor-paragraph', 29 | placeholder: 'editor-placeholder', 30 | quote: 'editor-quote', 31 | rtl: 'rtl', 32 | text: { 33 | bold: 'editor-text-bold', 34 | code: 'editor-text-code', 35 | hashtag: 'editor-text-hashtag', 36 | italic: 'editor-text-italic', 37 | overflowed: 'editor-text-overflowed', 38 | strikethrough: 'editor-text-strikethrough', 39 | underline: 'editor-text-underline', 40 | underlineStrikethrough: 'editor-text-underlineStrikethrough', 41 | }, 42 | }; 43 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/Editor/WrapperEditor.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { memo, useState } from 'react'; 5 | import SlateEditorV2, { MentionEditorProps } from './SlateEditorV2'; 6 | import { getCharacterCount } from './components/slateEditorUtils'; 7 | 8 | interface WrapperEditorProps { 9 | title?: string; 10 | } 11 | 12 | export default memo((props: WrapperEditorProps & MentionEditorProps) => { 13 | const { title, onChange, ...restProps } = props; 14 | const [len, setLen] = useState(0); 15 | const handleChange = e => { 16 | onChange?.(e); 17 | setLen(getCharacterCount(e || [])); 18 | }; 19 | return ( 20 |
21 |
22 |
23 | {title &&
{title}
} 24 |
25 |
{len}
26 |
27 |
28 | 29 |
30 |
31 | ); 32 | }); 33 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/Editor/components/VariableSelect.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import React, { forwardRef } from 'react'; 5 | 6 | interface VariableSelectProps { 7 | style: React.CSSProperties; 8 | list?: any[]; 9 | onChange?: (item: any, index: number) => void; 10 | } 11 | 12 | const VariableSelect = forwardRef((props, ref) => { 13 | const { style, list = [], onChange, ...rest } = props; 14 | 15 | return ( 16 |
17 |
18 | {list.map((item, index) => ( 19 |
{ 22 | onChange && onChange(item, index); 23 | }} 24 | className="cursor-pointer hover:bg-gray-100 p-2" 25 | > 26 | {item.name} 27 |
28 | ))} 29 |
30 |
31 | ); 32 | }); 33 | 34 | export default VariableSelect; 35 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/Editor/plugins/MentionNode.ts: -------------------------------------------------------------------------------- 1 | // MentionNode.ts 2 | import { EditorConfig, NodeKey, TextNode } from 'lexical'; 3 | 4 | 5 | export class MentionNode extends TextNode { 6 | __mention: string; 7 | 8 | static getType(): string { 9 | return 'mention'; 10 | } 11 | 12 | constructor(mention: string, key?: NodeKey) { 13 | super(`@${mention}`, key); 14 | this.__mention = mention; 15 | } 16 | 17 | 18 | createDOM(config: EditorConfig): HTMLElement { 19 | const dom = document.createElement('span'); 20 | dom.className = 'mention'; 21 | dom.style.userSelect = 'none'; 22 | dom.contentEditable = 'false'; 23 | dom.textContent = `@${this.__mention}`; 24 | return dom; 25 | } 26 | 27 | 28 | updateDOM(prevNode: MentionNode, dom: HTMLElement, config: EditorConfig): boolean { 29 | const updated = super.updateDOM(prevNode, dom, config); 30 | if (updated) { 31 | dom.textContent = `@${this.__mention}`; 32 | } 33 | return updated; 34 | } 35 | 36 | 37 | getTextContent(): string { 38 | return `@${this.__mention}`; 39 | } 40 | } 41 | 42 | 43 | export function $createMentionNode(mention: string): MentionNode { 44 | return new MentionNode(mention); 45 | } 46 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/Editor/plugins/TreeViewPlugin.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | /** 5 | * Copyright (c) Meta Platforms, Inc. and affiliates. 6 | * 7 | * This source code is licensed under the MIT license found in the 8 | * LICENSE file in the root directory of this source tree. 9 | * 10 | */ 11 | 12 | import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'; 13 | import { TreeView } from '@lexical/react/LexicalTreeView'; 14 | 15 | export default function TreeViewPlugin() { 16 | const [editor] = useLexicalComposerContext(); 17 | return ( 18 | 27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/Form/Input.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { ProFormTextArea } from '@ant-design/pro-components'; 5 | import { useIntl } from '@umijs/max'; 6 | export const TextareaRunName = ({ name }) => { 7 | const intl = useIntl(); 8 | return ( 9 | 24 | ); 25 | }; 26 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/RunForm/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { ProForm } from '@ant-design/pro-components'; 5 | import { useIntl } from '@umijs/max'; 6 | import { memo } from 'react'; 7 | import { TextareaRunName } from '../Form/Input'; 8 | import { RenderConfirm } from './RenderConfirm'; 9 | import { RenderInput } from './RenderInput'; 10 | 11 | interface RunFormProps { 12 | loading?: boolean; 13 | onFinish: (values: any) => Promise; 14 | data?: any; 15 | } 16 | 17 | const RunForm = memo(({ loading, onFinish, data }: RunFormProps) => { 18 | const intl = useIntl(); 19 | 20 | return ( 21 | 38 | 39 | 40 | 41 | 42 | ); 43 | }); 44 | 45 | export default RunForm; 46 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/RunPanel/RunPanel.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import RunPanel from './components'; 5 | 6 | export default RunPanel; 7 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/RunPanel/components/FileDownloadList.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { DownloadOutlined } from '@ant-design/icons'; 5 | import { useIntl } from '@umijs/max'; 6 | import { Button, Empty, List, Typography } from 'antd'; 7 | import { memo } from 'react'; 8 | 9 | interface FileDownloadListProps { 10 | files?: Record; 11 | } 12 | 13 | const FileDownloadList = memo(({ files }: FileDownloadListProps) => { 14 | const intl = useIntl(); 15 | 16 | if (!files || Object.keys(files).length === 0) { 17 | return ( 18 | 22 | ); 23 | } 24 | 25 | return ( 26 | ( 31 | } 38 | target="_blank" 39 | > 40 | {intl.formatMessage({ id: 'workflow.download' })} 41 | 42 | } 43 | > 44 | 45 | {filename} 46 | 47 | 48 | )} 49 | /> 50 | ); 51 | }); 52 | 53 | export default FileDownloadList; -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/VariableInNode.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { memo } from 'react'; 5 | 6 | interface VariableInNodeProps { 7 | value?: Array<{ name: string }>; 8 | } 9 | export default memo((props: VariableInNodeProps) => { 10 | return ( 11 | <> 12 | {props.value && props.value.length > 0 ? ( 13 |
14 | {props.value.map(item => ( 15 |
16 | {item.name} 17 |
18 | ))} 19 |
20 | ) : null} 21 | 22 | ); 23 | }); 24 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/VariableSelect.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/src/components/WorkFlow/components/VariableSelect.tsx -------------------------------------------------------------------------------- /web/src/components/WorkFlow/components/WorkflowTitle/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { Typography } from 'antd'; 5 | import { useIntl } from '@umijs/max'; 6 | import { memo } from 'react'; 7 | 8 | interface WorkflowTitleProps { 9 | name?: string; 10 | description?: string; 11 | publishStatus?: boolean; 12 | } 13 | 14 | export default memo(({ name, description, publishStatus }: WorkflowTitleProps) => { 15 | const intl = useIntl(); 16 | 17 | return ( 18 |
19 | 20 | {name} 21 | 22 | {publishStatus && ( 23 | 24 | ({intl.formatMessage({ id: 'workflow.nodeRunOtherMessage' })}) 25 | 26 | )} 27 | 28 | {description} 29 | 30 |
31 | ); 32 | }); -------------------------------------------------------------------------------- /web/src/components/WorkFlow/connectionRules.ts: -------------------------------------------------------------------------------- 1 | import { BlockEnum, NodeConnectionRules, NodeTypeConnectionRules } from './types'; 2 | 3 | // Define rules for TaskExecution node 4 | const taskExecutionRules: NodeConnectionRules = { 5 | 'executor_list': { 6 | validate: (connection, nodes) => { 7 | const sourceNode = nodes.find(node => node.id === connection.source); 8 | return sourceNode?.type === BlockEnum.LLM || sourceNode?.type === BlockEnum.Agent; 9 | }, 10 | errorMessage: 'Only LLM or Agent nodes can be connected to executor_list' 11 | } 12 | }; 13 | 14 | // Rules for each node type 15 | export const connectionRules: NodeTypeConnectionRules = { 16 | [BlockEnum.TaskExecution]: taskExecutionRules, 17 | // Add rules for other node types as needed 18 | }; -------------------------------------------------------------------------------- /web/src/components/WorkFlow/dataStore.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | 5 | import { create } from 'zustand'; 6 | import { devtools } from 'zustand/middleware'; 7 | type FlowState = { 8 | [key: string]: any; 9 | }; 10 | const useDataStore = create( 11 | devtools( 12 | (set, get) => ({ 13 | tempNode:[], 14 | setTempNode: data => { 15 | set(state => ({ 16 | tempNode: data, 17 | })); 18 | }, 19 | addTempNode: data => { 20 | set(state => ({ 21 | tempNode: [...state.tempNode, data], 22 | })); 23 | }, 24 | 25 | }), 26 | { name: 'useDataStore' }, 27 | ), 28 | ); 29 | export default useDataStore; 30 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/hooks/useNodeIdUpdate.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { useEffect } from 'react'; 5 | import useStore from '../store'; 6 | import { AppNode } from '../types'; 7 | 8 | const useNodeIdUpdate = (update: (nodeId: string, node: AppNode) => void) => { 9 | const selectedNode = useStore(state => state.selectedNode); 10 | const showChildNode = useStore(state => state.showChildNode); 11 | useEffect(() => { 12 | update(selectedNode?.id || '', selectedNode); 13 | }, [selectedNode, showChildNode]); 14 | }; 15 | function getNestedKeys(obj, path = []) { 16 | let result = []; 17 | for (let key in obj) { 18 | if (typeof obj[key] === 'object' && obj[key] !== null) { 19 | result.push(...getNestedKeys(obj[key], path.concat(key))); 20 | } else { 21 | result.push(path.concat(key)); 22 | } 23 | } 24 | return result; 25 | } 26 | export default useNodeIdUpdate; 27 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/hooks/useNodeManagement.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { useState } from 'react'; 5 | 6 | const useNodeManagement = () => { 7 | const [nodes, setNodes] = useState([]); 8 | 9 | const addNode = newNode => { 10 | setNodes(prevNodes => [...prevNodes, newNode]); 11 | }; 12 | 13 | return { nodes, addNode }; 14 | }; 15 | 16 | export default useNodeManagement; 17 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/hooks/useOutsideClick.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react'; 2 | 3 | /** 4 | * A custom hook to listen for clicks outside of a given element. 5 | * @param {React.MutableRefObject} ref - The ref of the element to check clicks against. 6 | * @param {Function} onOutsideClick - The callback function to call when a click occurs outside the element. 7 | */ 8 | function useOutsideClick(ref, onOutsideClick) { 9 | useEffect(() => { 10 | function handleClickOutside(event) { 11 | if (ref.current && !ref.current.contains(event.target)) { 12 | onOutsideClick(event); 13 | } 14 | } 15 | 16 | // Add event listeners in the capture phase 17 | document.addEventListener('mousedown', handleClickOutside, true); 18 | document.addEventListener('touchstart', handleClickOutside, true); 19 | document.addEventListener('mouseup', handleClickOutside, true); 20 | document.addEventListener('touchend', handleClickOutside, true); 21 | 22 | return () => { 23 | // Remove event listeners in the capture phase 24 | document.removeEventListener('mousedown', handleClickOutside, true); 25 | document.removeEventListener('touchstart', handleClickOutside, true); 26 | document.removeEventListener('mouseup', handleClickOutside, true); 27 | document.removeEventListener('touchend', handleClickOutside, true); 28 | }; 29 | }, [ref, onOutsideClick]); 30 | } 31 | 32 | export default useOutsideClick; 33 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/hooks/usePageVisibilityEffect .ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react'; 2 | import { useLocation, useNavigate } from 'react-router-dom'; 3 | 4 | type PageVisibilityEffectOptions = { 5 | onBeforeUnload?: (event: BeforeUnloadEvent) => void; 6 | onRouteChange?: (location: Location) => void; 7 | }; 8 | const usePageVisibilityEffect = ({ 9 | onBeforeUnload, 10 | onRouteChange, 11 | }: PageVisibilityEffectOptions) => { 12 | const location = useLocation(); 13 | const navigate = useNavigate(); 14 | 15 | useEffect(() => { 16 | 17 | const handleBeforeUnload = event => { 18 | if (onBeforeUnload) { 19 | onBeforeUnload(event); 20 | } 21 | }; 22 | 23 | 24 | window.addEventListener('beforeunload', handleBeforeUnload); 25 | 26 | 27 | if (onRouteChange) { 28 | onRouteChange(location); 29 | } 30 | 31 | 32 | return () => { 33 | window.removeEventListener('beforeunload', handleBeforeUnload); 34 | }; 35 | }, [location, onBeforeUnload, onRouteChange]); 36 | }; 37 | 38 | export default usePageVisibilityEffect; 39 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/nodes/Agent/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { NodeProps, Position } from '@xyflow/react'; 5 | import { memo } from 'react'; 6 | import useStore from '../../store'; 7 | import CustomHandle from '../CustomHandle'; 8 | 9 | export default memo((props: NodeProps) => { 10 | const edges = useStore(state => state.edges); 11 | 12 | // Check if current node is connected to executor_list 13 | const isConnectedToExecutorList = edges.some( 14 | edge => 15 | edge.source === props.id && 16 | edge.targetHandle === 'executor_list' 17 | ); 18 | 19 | return ( 20 |
21 | {!isConnectedToExecutorList && ( 22 | 28 | )} 29 | 35 |
36 | ); 37 | }); 38 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/nodes/CustomCode/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { NodeProps, Position } from '@xyflow/react'; 5 | import { memo } from 'react'; 6 | import CustomHandle from '../CustomHandle'; 7 | 8 | export default memo((props: NodeProps) => { 9 | return ( 10 |
11 | 17 | 23 | {/* 24 | */} 25 |
26 | ); 27 | }); 28 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/nodes/End/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { NodeProps, Position } from '@xyflow/react'; 5 | import { memo } from 'react'; 6 | import CustomHandle from '../CustomHandle'; 7 | 8 | export default memo((props: NodeProps) => { 9 | return ( 10 |
11 | 17 | 18 |
19 | ); 20 | }); 21 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/nodes/Http/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { NodeProps, Position } from '@xyflow/react'; 5 | import { Typography } from 'antd'; 6 | import { memo } from 'react'; 7 | import CustomHandle from '../CustomHandle'; 8 | const { Text } = Typography; 9 | export default memo((props: NodeProps) => { 10 | return ( 11 |
12 | 18 | 24 | 25 |
26 |
27 |
{props?.data?.method}
28 |
29 | 34 | {props?.data?.url} 35 | 36 |
37 |
38 |
39 |
40 | ); 41 | }); 42 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/nodes/Human/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { NodeProps, Position } from '@xyflow/react'; 5 | import { memo } from 'react'; 6 | import VariableInNode from '../../components/VariableInNode'; 7 | import CustomHandle from '../CustomHandle'; 8 | 9 | export default memo((props: NodeProps) => { 10 | return ( 11 |
12 | 18 | 24 | 25 | 26 | 27 |
28 | ); 29 | }); 30 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/nodes/Retriever/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { NodeProps, Position } from '@xyflow/react'; 5 | import { memo } from 'react'; 6 | import CustomHandle from '../CustomHandle'; 7 | 8 | export default memo((props: NodeProps) => { 9 | return ( 10 |
11 | 18 | 24 | 25 |
26 | ); 27 | }); 28 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/nodes/Skill/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { NodeProps, Position } from '@xyflow/react'; 5 | import { memo } from 'react'; 6 | import CustomHandle from '../CustomHandle'; 7 | 8 | export default memo((props: NodeProps) => { 9 | return ( 10 |
11 | 17 | 23 | 24 |
25 | ); 26 | }); 27 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/nodes/Start/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | /* 5 | * @LastEditors: biz 6 | */ 7 | import { NodeProps, Position } from '@xyflow/react'; 8 | import { memo } from 'react'; 9 | import VariableInNode from '../../components/VariableInNode'; 10 | import CustomHandle from '../CustomHandle'; 11 | 12 | export default memo((props: NodeProps) => { 13 | return ( 14 |
15 | 22 | {/* */} 23 | 24 |
25 | ); 26 | }); 27 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/nodes/TaskGeneration/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { NodeProps, Position } from '@xyflow/react'; 5 | import { memo } from 'react'; 6 | import useStore from '../../store'; 7 | import CustomHandle from '../CustomHandle'; 8 | 9 | export default memo((props: NodeProps) => { 10 | const { data, id } = props; 11 | 12 | const modelData = useStore(state => state.modelData); 13 | const modelList = () => { 14 | return modelData?.list?.find(x => x.model_config_id == props.data?.model)?.model_name; 15 | }; 16 | 17 | return ( 18 |
19 | 26 | 27 | {/* */} 28 | 34 |
35 | {data.model && ( 36 |
37 | {modelList()} 38 |
39 | )} 40 |
41 |
42 | ); 43 | }); 44 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/nodes/TemplateConversion/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { NodeProps, Position } from '@xyflow/react'; 5 | import { memo } from 'react'; 6 | import CustomHandle from '../CustomHandle'; 7 | 8 | export default memo((props: NodeProps) => { 9 | return ( 10 |
11 | 17 | 23 | {/* */} 24 | {/* */} 25 |
26 | ); 27 | }); 28 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/nodes/ToolNode/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { NodeProps, Position } from '@xyflow/react'; 5 | import { memo } from 'react'; 6 | import CustomHandle from '../CustomHandle'; 7 | 8 | export default memo((props: NodeProps) => { 9 | return ( 10 |
11 | 17 | 23 | {/* 24 | */} 25 |
26 | ); 27 | }); 28 | -------------------------------------------------------------------------------- /web/src/components/WorkFlow/propertyNodes/types.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { BlockEnum, PropertyNodeEnum } from '../types'; 5 | 6 | export interface PropertyNodeData { 7 | title: string; 8 | entitle: string; 9 | desc: string; 10 | descTools: string; 11 | endescTools: string; 12 | propertyType: PropertyNodeEnum; 13 | targetNodeTypes: BlockEnum[]; 14 | outputInfo?: { 15 | key: string; 16 | type: string; 17 | base: boolean; 18 | }; 19 | } 20 | 21 | export interface PropertyNodeConfig { 22 | node: any; 23 | panel: any; 24 | icon: PropertyNodeEnum; 25 | title: string; 26 | entitle: string; 27 | base: { 28 | type: PropertyNodeEnum; 29 | data: PropertyNodeData; 30 | }; 31 | } 32 | 33 | export type PropertyNodeCustomType = { 34 | [key in PropertyNodeEnum]: PropertyNodeConfig; 35 | }; -------------------------------------------------------------------------------- /web/src/components/WorkFlow/transformRules.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { BlockEnum, NodeTypeTransformRules } from './types'; 5 | 6 | // Define transform rules for TaskExecution node 7 | const taskExecutionRules = { 8 | handles: [ 9 | { 10 | handleId: 'executor_list', 11 | transform: (sourceNode) => ({ 12 | currentId: sourceNode.id, 13 | isChild: true 14 | }) 15 | } 16 | ] 17 | }; 18 | 19 | // Rules for each node type 20 | export const transformRules: NodeTypeTransformRules = { 21 | [BlockEnum.TaskExecution]: taskExecutionRules, 22 | // Add rules for other node types as needed 23 | }; -------------------------------------------------------------------------------- /web/src/components/WorkFlow/utils/analysisVariable.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | 5 | export default function parseText( 6 | text: string, 7 | ): { identifier: string; ioType: string; fieldName: string }[] { 8 | const pattern = /<<([0-9a-fA-F\-]+)\.(inputs|outputs)\.([^>]+)>>/g; 9 | const results: { identifier: string; ioType: string; fieldName: string }[] = []; 10 | 11 | let match: RegExpExecArray | null; 12 | while ((match = pattern.exec(text)) !== null) { 13 | const identifier = match[1]; 14 | const ioType = match[2]; 15 | const fieldName = match[3]; 16 | results.push({ identifier, ioType, fieldName }); 17 | } 18 | 19 | return results; 20 | } 21 | -------------------------------------------------------------------------------- /web/src/components/bottomlabel.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const bottomlabel: React.FC = () => { 4 | 5 | return ( 6 |
10 |
v106.4.9.0 Res v106.4.9.135
11 |
12 | ); 13 | }; 14 | export default bottomlabel; 15 | -------------------------------------------------------------------------------- /web/src/components/callword.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: wnagchi 1305bcd@gmail.com 3 | */ 4 | /* 5 | * @LastEditors: biz 6 | */ 7 | import { QuestionCircleOutlined } from '@ant-design/icons'; 8 | import { Tooltip } from 'antd'; 9 | import React, { useEffect } from 'react'; 10 | 11 | interface ChildProps { 12 | title: any; 13 | name: any; 14 | className?: any; 15 | required?: any; 16 | } 17 | const callword: React.FC = ({ title, name, className, required }) => { 18 | 19 | 20 | useEffect(() => {}, []); 21 | return ( 22 |
23 | 24 | {required ? '*' : ''} {name} 25 | 26 | 27 | 28 | 29 |
30 | ); 31 | }; 32 | export default callword; 33 | -------------------------------------------------------------------------------- /web/src/components/headportrait.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import React, { useEffect } from 'react'; 5 | 6 | interface ChildProps { 7 | Image: any; 8 | icon?: any; 9 | avatar?: any; 10 | size?: string; 11 | } 12 | const headportrait: React.FC = ({ Image, icon, avatar, size = '42' }) => { 13 | useEffect(() => {}, []); 14 | return ( 15 |
18 |
19 | 20 |
21 | {icon ? ( 22 |
23 | 24 |
25 | ) : null} 26 |
27 | ); 28 | }; 29 | export default headportrait; 30 | -------------------------------------------------------------------------------- /web/src/components/index.ts: -------------------------------------------------------------------------------- 1 | 2 | import Footer from './Footer'; 3 | import { Question, SelectLang } from './RightContent'; 4 | import { AvatarDropdown, AvatarName } from './RightContent/AvatarDropdown'; 5 | 6 | export { AvatarDropdown, AvatarName, Footer, Question, SelectLang }; 7 | -------------------------------------------------------------------------------- /web/src/db/contentLibrary.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/src/db/contentLibrary.ts -------------------------------------------------------------------------------- /web/src/db/test.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/src/db/test.ts -------------------------------------------------------------------------------- /web/src/hooks/useBacklogList.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { getBacklogsList } from '@/api/workflow'; 5 | import useUserStore from '@/store/user'; 6 | import useSocketStore from '@/store/websocket'; 7 | import { useRequest } from 'ahooks'; 8 | import { useState } from 'react'; 9 | 10 | export const useBacklogList = () => { 11 | const [backlogData, setBacklogData] = useState(null); 12 | const listenBakLogs = useSocketStore(state => 13 | state.filterMessages('workflow_need_human_confirm'), 14 | ); 15 | const workflowProgress = useSocketStore(state => state.filterMessages('workflow_run_progress')); 16 | const prevConfirmDealtWith = useUserStore(state => state.prevConfirmDealtWith); 17 | const { loading, runAsync } = useRequest( 18 | async () => { 19 | const res = await getBacklogsList({ 20 | current: 1, 21 | pageSize: 10, 22 | }); 23 | return res.data; 24 | }, 25 | { 26 | refreshDeps: [listenBakLogs.length, workflowProgress.length, prevConfirmDealtWith], 27 | onSuccess: result => { 28 | setBacklogData(result); 29 | }, 30 | }, 31 | ); 32 | return { 33 | loading, 34 | data: backlogData, 35 | refresh: runAsync, 36 | }; 37 | }; 38 | -------------------------------------------------------------------------------- /web/src/hooks/useResetPanel.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import useStore from '@/components/WorkFlow/store'; 5 | import useUserStore from '@/store/user'; 6 | 7 | export const useResetPanel = () => { 8 | const setSelect = useStore(state => state.setSelect); 9 | const setRunId = useUserStore(state => state.setRunId); 10 | const setDealtWithData = useUserStore(state => state.setDealtWithData); 11 | return () => { 12 | setRunId(null); 13 | setDealtWithData(null); 14 | setSelect(null); 15 | }; 16 | }; 17 | -------------------------------------------------------------------------------- /web/src/layout/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | 5 | import AgentCreate from '@/components/AgentCreate'; 6 | import SkillCreate from '@/components/SkillCreate'; 7 | import DealtWithForLog from '@/components/WorkFlow/components/DealtWith/DealtWithForLog'; 8 | import RunPanelLog from '@/components/LogPanel/RunPanelLog'; 9 | import RunWorkFlow from '@/components/WorkFlow/RunWorkFlow'; 10 | import React from 'react'; 11 | 12 | interface PlazaProps { 13 | children: React.ReactNode; 14 | } 15 | 16 | const PageWrap: React.FC = ({ children }) => { 17 | return ( 18 |
19 |
{children}
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | ); 28 | }; 29 | 30 | export default PageWrap; 31 | -------------------------------------------------------------------------------- /web/src/loading.tsx: -------------------------------------------------------------------------------- 1 | import { Spin } from "antd"; 2 | 3 | /* 4 | * @LastEditors: biz 5 | */ 6 | export default function Loading() { 7 | return ( 8 |
9 | 10 |
11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /web/src/locales/en-US.json: -------------------------------------------------------------------------------- 1 | { 2 | "createkb.uploadToKnowledgeBase": "Upload to Knowledge Base", 3 | "createkb.splitContent": "Split Content", 4 | "createkb.splitType": "Split Type", 5 | "createkb.chunkSize": "Chunk Size", 6 | "createkb.chunkOverlap": "Chunk Overlap", 7 | "createkb.fileList": "File List:", 8 | "createkb.deleteFile": "Delete File" 9 | } -------------------------------------------------------------------------------- /web/src/locales/en-US/component.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | export default { 5 | 'component.tagSelect.expand': 'Expand', 6 | 'component.tagSelect.collapse': 'Collapse', 7 | 'component.tagSelect.all': 'All', 8 | 'component.menu.title1': 'Menu Title 1', 9 | 'component.menu.dashboard': 'Home', 10 | 'component.menu.chatRoomList': 'Meeting Room List', 11 | 'component.menu.chatRoom': 'Meeting Room', 12 | 'component.menu.meeting': 'Roundtable', 13 | 'component.menu.title2': 'Menu Title 2', 14 | 'component.menu.workspace': 'Workspace', 15 | 'component.menu.workflow': 'Workflow', 16 | 'component.menu.title3': 'Menu Title 3', 17 | 'component.menu.creation': 'Creation', 18 | 'component.menu.agent': 'Agent', 19 | 'component.menu.skill': 'Skill', 20 | 'component.menu.knowledgeBase': 'Knowledge Base', 21 | 'component.menu.teamAgent': 'Team Agent', 22 | 'component.menu.teamSkill': 'Team Skill', 23 | 'component.label.teamVisible': 'Team Visible', 24 | 'component.tooltip.publishWorkflowFirst': 'Please publish the workflow first', 25 | 'component.menu.backToPreviousPage': 'Back to Previous Page', 26 | 'component.menu.edit': 'Edit', 27 | 'component.menu.setting': 'Setting', 28 | 'component.menu.arrange': 'Arrange', 29 | 'component.menu.accessAPI': 'Access API', 30 | 'component.tooltip.enableAPIFirst': 'Please enable the API first', 31 | 'component.menu.log': 'Log', 32 | }; 33 | -------------------------------------------------------------------------------- /web/src/locales/en-US/globalHeader.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.globalHeader.search': 'Search', 3 | 'component.globalHeader.search.example1': 'Search example 1', 4 | 'component.globalHeader.search.example2': 'Search example 2', 5 | 'component.globalHeader.search.example3': 'Search example 3', 6 | 'component.globalHeader.help': 'Help', 7 | 'component.globalHeader.notification': 'Notification', 8 | 'component.globalHeader.notification.empty': 'You have viewed all notifications.', 9 | 'component.globalHeader.message': 'Message', 10 | 'component.globalHeader.message.empty': 'You have viewed all messsages.', 11 | 'component.globalHeader.event': 'Event', 12 | 'component.globalHeader.event.empty': 'You have viewed all events.', 13 | 'component.noticeIcon.clear': 'Clear', 14 | 'component.noticeIcon.cleared': 'Cleared', 15 | 'component.noticeIcon.empty': 'No notifications', 16 | 'component.noticeIcon.view-more': 'View more', 17 | }; 18 | -------------------------------------------------------------------------------- /web/src/locales/en-US/pwa.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.pwa.offline': 'You are offline now', 3 | 'app.pwa.serviceworker.updated': 'New content is available', 4 | 'app.pwa.serviceworker.updated.hint': 5 | 'Please press the "Refresh" button to reload current page', 6 | 'app.pwa.serviceworker.updated.ok': 'Refresh', 7 | }; 8 | -------------------------------------------------------------------------------- /web/src/locales/zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "createkb.uploadToKnowledgeBase": "上传到知识库", 3 | "createkb.splitContent": "是否分段", 4 | "createkb.splitType": "分段类型", 5 | "createkb.chunkSize": "分段长度", 6 | "createkb.chunkOverlap": "分段重叠长度", 7 | "createkb.fileList": "文件列表:", 8 | "createkb.deleteFile": "删除文件" 9 | } -------------------------------------------------------------------------------- /web/src/locales/zh-CN/component.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | export default { 5 | 'component.tagSelect.expand': '展开', 6 | 'component.tagSelect.collapse': '收起', 7 | 'component.tagSelect.all': '全部', 8 | 'component.menu.title1': '菜单标题1', 9 | 'component.menu.dashboard': '首页', 10 | 'component.menu.chatRoomList': '会议室列表', 11 | 'component.menu.chatRoom': '会议室', 12 | 'component.menu.meeting': '圆桌', 13 | 'component.menu.title2': '菜单标题2', 14 | 'component.menu.workspace': '工作区', 15 | 'component.menu.workflow': '工作流', 16 | 'component.menu.title3': '菜单标题3', 17 | 'component.menu.creation': '创造', 18 | 'component.menu.agent': '智能体', 19 | 'component.menu.skill': '技能', 20 | 'component.menu.knowledgeBase': '知识库', 21 | 'component.menu.teamAgent': '团队Agent', 22 | 'component.menu.teamSkill': '团队技能', 23 | 'component.label.teamVisible': '团队可见', 24 | 'component.tooltip.publishWorkflowFirst': '请先发布工作流', 25 | 'component.menu.backToPreviousPage': '返回前一页', 26 | 'component.menu.edit': '编辑', 27 | 'component.menu.setting': '设置', 28 | 'component.menu.arrange': '编排', 29 | 'component.menu.accessAPI': '访问API', 30 | 'component.tooltip.enableAPIFirst': '请先开启API', 31 | 'component.menu.log': '日志', 32 | 'menu.knowledgebase': '知识库', 33 | }; 34 | -------------------------------------------------------------------------------- /web/src/locales/zh-CN/globalHeader.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.globalHeader.search': '站内搜索', 3 | 'component.globalHeader.search.example1': '搜索提示一', 4 | 'component.globalHeader.search.example2': '搜索提示二', 5 | 'component.globalHeader.search.example3': '搜索提示三', 6 | 'component.globalHeader.help': '使用文档', 7 | 'component.globalHeader.notification': '通知', 8 | 'component.globalHeader.notification.empty': '你已查看所有通知', 9 | 'component.globalHeader.message': '消息', 10 | 'component.globalHeader.message.empty': '您已读完所有消息', 11 | 'component.globalHeader.event': '待办', 12 | 'component.globalHeader.event.empty': '你已完成所有待办', 13 | 'component.noticeIcon.clear': '清空', 14 | 'component.noticeIcon.cleared': '清空了', 15 | 'component.noticeIcon.empty': '暂无数据', 16 | 'component.noticeIcon.view-more': '查看更多', 17 | }; 18 | -------------------------------------------------------------------------------- /web/src/locales/zh-CN/pwa.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.pwa.offline': '当前处于离线状态', 3 | 'app.pwa.serviceworker.updated': '有新内容', 4 | 'app.pwa.serviceworker.updated.hint': '请点击“刷新”按钮或者手动刷新页面', 5 | 'app.pwa.serviceworker.updated.ok': '刷新', 6 | }; 7 | -------------------------------------------------------------------------------- /web/src/locales/zh-CN/settingDrawer.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.setting.pagestyle': '整体风格设置', 3 | 'app.setting.pagestyle.dark': '暗色菜单风格', 4 | 'app.setting.pagestyle.light': '亮色菜单风格', 5 | 'app.setting.content-width': '内容区域宽度', 6 | 'app.setting.content-width.fixed': '定宽', 7 | 'app.setting.content-width.fluid': '流式', 8 | 'app.setting.themecolor': '主题色', 9 | 'app.setting.themecolor.dust': '薄暮', 10 | 'app.setting.themecolor.volcano': '火山', 11 | 'app.setting.themecolor.sunset': '日暮', 12 | 'app.setting.themecolor.cyan': '明青', 13 | 'app.setting.themecolor.green': '极光绿', 14 | 'app.setting.themecolor.daybreak': '拂晓蓝(默认)', 15 | 'app.setting.themecolor.geekblue': '极客蓝', 16 | 'app.setting.themecolor.purple': '酱紫', 17 | 'app.setting.navigationmode': '导航模式', 18 | 'app.setting.sidemenu': '侧边菜单布局', 19 | 'app.setting.topmenu': '顶部菜单布局', 20 | 'app.setting.fixedheader': '固定 Header', 21 | 'app.setting.fixedsidebar': '固定侧边菜单', 22 | 'app.setting.fixedsidebar.hint': '侧边菜单布局时可配置', 23 | 'app.setting.hideheader': '下滑时隐藏 Header', 24 | 'app.setting.hideheader.hint': '固定 Header 时可配置', 25 | 'app.setting.othersettings': '其他设置', 26 | 'app.setting.weakmode': '色弱模式', 27 | 'app.setting.copy': '拷贝设置', 28 | 'app.setting.copyinfo': '拷贝成功,请到 config/defaultSettings.js 中替换默认配置', 29 | 'app.setting.production.hint': 30 | '配置栏只在开发环境用于预览,生产环境不会展现,请拷贝后手动修改配置文件', 31 | }; 32 | -------------------------------------------------------------------------------- /web/src/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "NexusAI", 3 | "short_name": "NexusAI", 4 | "display": "standalone", 5 | "start_url": "./?utm_source=homescreen", 6 | "theme_color": "#002140", 7 | "background_color": "#001529", 8 | "icons": [ 9 | { 10 | "src": "icons/icon-192x192.png", 11 | "sizes": "192x192" 12 | }, 13 | { 14 | "src": "icons/icon-128x128.png", 15 | "sizes": "128x128" 16 | }, 17 | { 18 | "src": "icons/icon-512x512.png", 19 | "sizes": "512x512" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /web/src/pages/404.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import { history, useIntl } from '@umijs/max'; 5 | import { Button, Result } from 'antd'; 6 | import React from 'react'; 7 | 8 | const NoFoundPage: React.FC = () => ( 9 | history.push('/')}> 15 | {useIntl().formatMessage({ id: 'pages.404.buttonText' })} 16 | 17 | } 18 | /> 19 | ); 20 | 21 | export default NoFoundPage; 22 | -------------------------------------------------------------------------------- /web/src/pages/User/Login/__snapshots__/login.test.tsx.snap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/src/pages/User/Login/__snapshots__/login.test.tsx.snap -------------------------------------------------------------------------------- /web/src/pages/WorkSpace/WorkFlow/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | import WorkFlowLeftMenu from '@/components/WorkFlow/components/Menu/WorkFlowLeftMenu'; 5 | import WorkFlow from '@/components/WorkFlow'; 6 | import React from 'react'; 7 | 8 | const WorkSpace: React.FC = () => { 9 | return ( 10 |
11 | {/* */} 12 | 13 | 14 |
15 | ); 16 | }; 17 | export default WorkSpace; 18 | -------------------------------------------------------------------------------- /web/src/pages/WorkSpace/index.less: -------------------------------------------------------------------------------- 1 | .user-prolist { 2 | .ant-list-split { 3 | // overflow-y: auto; 4 | display: flex !important; 5 | flex-direction: column !important; 6 | height: calc(100vh - 160px) !important; 7 | .ant-spin-nested-loading { 8 | flex: 1 !important; 9 | overflow-y: auto !important; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /web/src/pages/WorkSpace/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | 5 | import { Footer } from '@/components'; 6 | import RunWorkFlow from '@/components/WorkFlow/RunWorkFlow'; 7 | import React from 'react'; 8 | import Backlogs from './components/Backlogs'; 9 | import RecentlyActive from './components/RecentlyActive'; 10 | import WorkFlowLog from './components/WorkFlowLog'; 11 | import './index.less'; 12 | const WorkSpace: React.FC = () => { 13 | return ( 14 |
18 | 19 |
20 | 21 | 22 |
23 |
24 | 25 |
26 | ); 27 | }; 28 | 29 | export default WorkSpace; 30 | -------------------------------------------------------------------------------- /web/src/py2js/nodes/test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | 5 | class Test { 6 | constructor() { 7 | this.a = 1; 8 | this.b = 2; 9 | this.c = 3; 10 | } 11 | test() { 12 | return this.a + this.b + this.c; 13 | } 14 | } 15 | export default Test; 16 | -------------------------------------------------------------------------------- /web/src/services/ant-design-pro/api.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/src/services/ant-design-pro/api.ts -------------------------------------------------------------------------------- /web/src/services/ant-design-pro/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/src/services/ant-design-pro/index.ts -------------------------------------------------------------------------------- /web/src/services/ant-design-pro/login.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/src/services/ant-design-pro/login.ts -------------------------------------------------------------------------------- /web/src/services/ant-design-pro/typings.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/src/services/ant-design-pro/typings.d.ts -------------------------------------------------------------------------------- /web/src/services/swagger/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | // @ts-ignore 5 | /* eslint-disable */ 6 | 7 | export default { 8 | 9 | }; 10 | -------------------------------------------------------------------------------- /web/src/store/createSelectors.ts: -------------------------------------------------------------------------------- 1 | import { StoreApi, UseBoundStore } from 'zustand'; 2 | 3 | type WithSelectors = S extends { getState: () => infer T } 4 | ? S & { use: { [K in keyof T]: () => T[K] } } 5 | : never; 6 | 7 | export const createSelectors = >>(_store: S) => { 8 | let store = _store as WithSelectors; 9 | store.use = {}; 10 | for (let k of Object.keys(store.getState())) { 11 | (store.use as any)[k] = () => store(s => s[k as keyof typeof s]); 12 | } 13 | 14 | return store; 15 | }; 16 | -------------------------------------------------------------------------------- /web/src/typings.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'slash2'; 2 | declare module '*.css'; 3 | declare module '*.less'; 4 | declare module '*.scss'; 5 | declare module '*.sass'; 6 | declare module '*.svg'; 7 | declare module '*.png'; 8 | declare module '*.jpg'; 9 | declare module '*.jpeg'; 10 | declare module '*.gif'; 11 | declare module '*.bmp'; 12 | declare module '*.tiff'; 13 | declare module 'omit.js'; 14 | declare module 'numeral'; 15 | declare module '@antv/data-set'; 16 | declare module 'mockjs'; 17 | declare module 'react-fittext'; 18 | declare module 'bizcharts-plugin-slider'; 19 | 20 | declare const REACT_APP_ENV: 'test' | 'dev' | 'pre' | false; 21 | -------------------------------------------------------------------------------- /web/src/utils/upload.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/src/utils/upload.ts -------------------------------------------------------------------------------- /web/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @LastEditors: biz 3 | */ 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: ['./src/**/*.{js,jsx,ts,tsx}'], 7 | theme: { 8 | extend: { 9 | animation: { 10 | 'fade-in': 'fadeIn 1s ease-in-out', 11 | }, 12 | keyframes: { 13 | fadeIn: { 14 | '0%': { opacity: 0 }, 15 | '100%': { opacity: 1 }, 16 | }, 17 | }, 18 | }, 19 | }, 20 | plugins: [], 21 | }; 22 | -------------------------------------------------------------------------------- /web/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "declaration": true, 6 | "outDir": "./dist", 7 | "moduleResolution": "node", 8 | "importHelpers": true, 9 | "jsx": "preserve", 10 | "esModuleInterop": true, 11 | "sourceMap": true, 12 | "baseUrl": "./", 13 | "skipLibCheck": true, 14 | "experimentalDecorators": true, 15 | "strict": false, 16 | "resolveJsonModule": true, 17 | "allowSyntheticDefaultImports": true, 18 | "paths": { 19 | "@/*": ["./src/*"], 20 | "@@/*": ["./src/.umi/*"], 21 | "@@test/*": ["./src/.umi-test/*"] 22 | } 23 | }, 24 | "include": ["./**/*.d.ts", "./**/*.ts", "./**/*.tsx", "src"] 25 | } 26 | -------------------------------------------------------------------------------- /web/types/index.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EDEAI/NexusAI/a4c45e904bee6057a42206af88787a2cc8264025/web/types/index.d.ts -------------------------------------------------------------------------------- /web/typings.d.ts: -------------------------------------------------------------------------------- 1 | declare const API_URL: string; 2 | declare const WS_URL: string; 3 | declare const CHAT_URL: string; 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /websocket.py: -------------------------------------------------------------------------------- 1 | import uvicorn 2 | import asyncio 3 | from fastapi import FastAPI 4 | from fastapi.middleware.cors import CORSMiddleware 5 | from config import settings 6 | from core.websocket.websocket_manager import websocket_router 7 | from core.websocket.websocket_queue_pop import queue_processor 8 | 9 | app = FastAPI( 10 | title="NexusAI WebSocket Server", 11 | description="WebSocket server for handling real-time connections.", 12 | version="1.0.0" 13 | ) 14 | 15 | app.add_middleware( 16 | CORSMiddleware, 17 | allow_origins=["*"], 18 | allow_credentials=True, 19 | allow_methods=["*"], 20 | allow_headers=["*"], 21 | ) 22 | 23 | app.include_router(websocket_router()) 24 | 25 | def start_queue_processor(): 26 | asyncio.create_task(queue_processor()) 27 | 28 | app.add_event_handler("startup", start_queue_processor) 29 | 30 | if __name__ == "__main__": 31 | uvicorn.run("websocket:app", host="0.0.0.0", port=settings.WEBSOCKET_PORT) 32 | --------------------------------------------------------------------------------