From 86303e358ef65c17af64a86a73729c4c7f884325 Mon Sep 17 00:00:00 2001 From: zstar <65890619+zstar1003@users.noreply.github.com> Date: Fri, 6 Jun 2025 23:05:30 +0800 Subject: [PATCH] =?UTF-8?q?chores:=20=E5=88=A0=E9=99=A4=E5=89=8D=E7=AB=AFa?= =?UTF-8?q?gent=E7=9B=B8=E5=85=B3=E5=86=85=E5=AE=B9=E5=8F=8A=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E8=AF=AD=E8=A8=80=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除了多个与流程功能相关的组件和文件 - 移除了 API 服务中与流程相关的无用代码 - 更新了导航钩子和头部组件,移除了与流程相关的路由和图标 - 删除了多个语言翻译文件 --- web/src/components/api-service/hooks.ts | 8 +- .../prompt-editor/variable-node.tsx | 10 - .../prompt-editor/variable-picker-plugin.tsx | 2 - web/src/constants/chat.ts | 1 - web/src/hooks/flow-hooks.ts | 308 -- web/src/hooks/logic-hooks/navigate-hooks.ts | 19 +- web/src/layouts/next-header.tsx | 2 - web/src/locales/config.ts | 42 +- web/src/pages/agent/agent-sidebar.tsx | 103 - .../agent/canvas/context-menu/index.less | 18 - .../pages/agent/canvas/context-menu/index.tsx | 107 - web/src/pages/agent/canvas/edge/index.less | 31 - web/src/pages/agent/canvas/edge/index.tsx | 108 - web/src/pages/agent/canvas/index.less | 10 - web/src/pages/agent/canvas/index.tsx | 183 - .../pages/agent/canvas/node/begin-node.tsx | 72 - web/src/pages/agent/canvas/node/card.tsx | 57 - .../agent/canvas/node/categorize-handle.tsx | 40 - .../agent/canvas/node/categorize-node.tsx | 68 - web/src/pages/agent/canvas/node/dropdown.tsx | 58 - .../pages/agent/canvas/node/email-node.tsx | 78 - .../pages/agent/canvas/node/generate-node.tsx | 57 - .../pages/agent/canvas/node/handle-icon.tsx | 20 - web/src/pages/agent/canvas/node/hooks.ts | 104 - web/src/pages/agent/canvas/node/index.less | 285 -- web/src/pages/agent/canvas/node/index.tsx | 45 - .../pages/agent/canvas/node/invoke-node.tsx | 59 - .../agent/canvas/node/iteration-node.tsx | 127 - .../pages/agent/canvas/node/keyword-node.tsx | 57 - .../pages/agent/canvas/node/logic-node.tsx | 45 - .../pages/agent/canvas/node/message-node.tsx | 65 - .../pages/agent/canvas/node/node-header.tsx | 73 - web/src/pages/agent/canvas/node/note-node.tsx | 92 - web/src/pages/agent/canvas/node/popover.tsx | 121 - .../pages/agent/canvas/node/relevant-node.tsx | 70 - .../agent/canvas/node/retrieval-node.tsx | 88 - .../pages/agent/canvas/node/rewrite-node.tsx | 57 - .../pages/agent/canvas/node/switch-node.tsx | 114 - .../pages/agent/canvas/node/template-node.tsx | 75 - web/src/pages/agent/constant.tsx | 2985 ----------------- web/src/pages/agent/context.ts | 6 - web/src/pages/agent/debug-content/index.less | 5 - web/src/pages/agent/debug-content/index.tsx | 238 -- .../agent/debug-content/popover-form.tsx | 74 - web/src/pages/agent/flow-tooltip.tsx | 19 - web/src/pages/agent/form-hooks.ts | 77 - web/src/pages/agent/form-sheet/index.less | 21 - web/src/pages/agent/form-sheet/index.tsx | 208 -- web/src/pages/agent/form-sheet/next.tsx | 158 - .../form-sheet/single-debug-drawer/index.tsx | 81 - .../agent/form-sheet/use-form-config-map.tsx | 307 -- .../pages/agent/form/akshare-form/index.tsx | 22 - .../pages/agent/form/answer-form/index.tsx | 5 - web/src/pages/agent/form/arxiv-form/index.tsx | 36 - .../agent/form/baidu-fanyi-form/index.tsx | 71 - web/src/pages/agent/form/baidu-form/index.tsx | 22 - .../form/begin-form/begin-dynamic-options.tsx | 68 - web/src/pages/agent/form/begin-form/hooks.ts | 50 - .../pages/agent/form/begin-form/index.less | 24 - web/src/pages/agent/form/begin-form/index.tsx | 111 - .../agent/form/begin-form/paramater-modal.tsx | 124 - .../agent/form/begin-form/query-table.tsx | 92 - web/src/pages/agent/form/bing-form/index.tsx | 42 - .../categorize-form/dynamic-categorize.tsx | 265 -- .../pages/agent/form/categorize-form/hooks.ts | 45 - .../agent/form/categorize-form/index.less | 13 - .../agent/form/categorize-form/index.tsx | 26 - .../components/dynamic-input-variable.tsx | 130 - .../pages/agent/form/components/index.less | 22 - .../next-dynamic-input-variable.tsx | 138 - .../agent/form/concentrator-form/index.tsx | 17 - .../pages/agent/form/crawler-form/index.tsx | 38 - web/src/pages/agent/form/deepl-form/index.tsx | 36 - .../agent/form/duckduckgo-form/index.tsx | 52 - web/src/pages/agent/form/email-form/index.tsx | 53 - .../pages/agent/form/exesql-form/index.tsx | 88 - .../pages/agent/form/generate-form/index.tsx | 78 - .../pages/agent/form/github-form/index.tsx | 21 - .../pages/agent/form/google-form/index.tsx | 34 - .../agent/form/google-scholar-form/index.tsx | 75 - .../form/invoke-form/dynamic-variables.tsx | 130 - web/src/pages/agent/form/invoke-form/hooks.ts | 97 - .../pages/agent/form/invoke-form/index.less | 44 - .../pages/agent/form/invoke-form/index.tsx | 78 - .../pages/agent/form/iteration-from/index.tsx | 94 - web/src/pages/agent/form/jin10-form/index.tsx | 145 - .../agent/form/keyword-extract-form/index.tsx | 48 - .../pages/agent/form/message-form/index.less | 16 - .../pages/agent/form/message-form/index.tsx | 82 - .../pages/agent/form/pubmed-form/index.tsx | 46 - .../pages/agent/form/qweather-form/index.tsx | 157 - .../pages/agent/form/relevant-form/hooks.ts | 53 - .../pages/agent/form/relevant-form/index.tsx | 49 - .../pages/agent/form/retrieval-form/index.tsx | 54 - .../pages/agent/form/retrieval-form/next.tsx | 59 - .../form/rewrite-question-form/index.tsx | 68 - .../pages/agent/form/switch-form/index.less | 21 - .../pages/agent/form/switch-form/index.tsx | 204 -- .../pages/agent/form/template-form/index.tsx | 24 - .../pages/agent/form/tushare-form/index.tsx | 83 - .../pages/agent/form/wencai-form/index.tsx | 55 - .../pages/agent/form/wikipedia-form/index.tsx | 48 - .../agent/form/yahoo-finance-form/index.tsx | 40 - web/src/pages/agent/hooks.tsx | 608 ---- .../pages/agent/hooks/use-before-delete.tsx | 57 - web/src/pages/agent/hooks/use-build-dsl.ts | 29 - web/src/pages/agent/hooks/use-export-json.ts | 71 - web/src/pages/agent/hooks/use-fetch-data.ts | 19 - .../pages/agent/hooks/use-get-begin-query.tsx | 113 - web/src/pages/agent/hooks/use-iteration.ts | 0 .../pages/agent/hooks/use-open-document.ts | 12 - web/src/pages/agent/hooks/use-save-graph.ts | 85 - web/src/pages/agent/hooks/use-set-graph.ts | 17 - web/src/pages/agent/hooks/use-show-drawer.tsx | 153 - web/src/pages/agent/index.tsx | 123 - web/src/pages/agent/interface.ts | 37 - web/src/pages/agent/operator-icon.tsx | 25 - web/src/pages/agent/store.ts | 455 --- .../pages/agent/upload-agent-dialog/index.tsx | 36 - .../upload-agent-dialog/upload-agent-form.tsx | 91 - web/src/pages/agent/utils.test.ts | 106 - web/src/pages/agent/utils.ts | 440 --- web/src/pages/agents/agent-card.tsx | 57 - web/src/pages/agents/agent-templates.tsx | 51 - web/src/pages/agents/create-agent-dialog.tsx | 36 - web/src/pages/agents/create-agent-form.tsx | 106 - web/src/pages/agents/index.tsx | 26 - web/src/pages/agents/template-card.tsx | 45 - web/src/pages/chat/share/large.tsx | 7 +- .../pages/flow/canvas/context-menu/index.less | 18 - .../pages/flow/canvas/context-menu/index.tsx | 107 - web/src/pages/flow/canvas/edge/index.less | 31 - web/src/pages/flow/canvas/edge/index.tsx | 108 - web/src/pages/flow/canvas/index.less | 10 - web/src/pages/flow/canvas/index.tsx | 237 -- web/src/pages/flow/canvas/node/begin-node.tsx | 72 - web/src/pages/flow/canvas/node/card.tsx | 57 - .../flow/canvas/node/categorize-handle.tsx | 40 - .../flow/canvas/node/categorize-node.tsx | 68 - web/src/pages/flow/canvas/node/dropdown.tsx | 58 - web/src/pages/flow/canvas/node/email-node.tsx | 78 - .../pages/flow/canvas/node/generate-node.tsx | 57 - .../pages/flow/canvas/node/handle-icon.tsx | 20 - web/src/pages/flow/canvas/node/hooks.ts | 104 - web/src/pages/flow/canvas/node/index.less | 285 -- web/src/pages/flow/canvas/node/index.tsx | 45 - .../pages/flow/canvas/node/invoke-node.tsx | 59 - .../pages/flow/canvas/node/iteration-node.tsx | 127 - .../pages/flow/canvas/node/keyword-node.tsx | 57 - web/src/pages/flow/canvas/node/logic-node.tsx | 45 - .../pages/flow/canvas/node/message-node.tsx | 65 - .../pages/flow/canvas/node/node-header.tsx | 73 - web/src/pages/flow/canvas/node/note-node.tsx | 92 - web/src/pages/flow/canvas/node/popover.tsx | 121 - .../pages/flow/canvas/node/relevant-node.tsx | 70 - .../pages/flow/canvas/node/retrieval-node.tsx | 88 - .../pages/flow/canvas/node/rewrite-node.tsx | 57 - .../pages/flow/canvas/node/switch-node.tsx | 114 - .../pages/flow/canvas/node/template-node.tsx | 75 - web/src/pages/flow/chat/box.tsx | 92 - web/src/pages/flow/chat/drawer.tsx | 25 - web/src/pages/flow/chat/hooks.ts | 141 - web/src/pages/flow/chat/index.less | 8 - web/src/pages/flow/constant.tsx | 2972 ---------------- web/src/pages/flow/context.ts | 6 - web/src/pages/flow/customer_service.json | 312 -- web/src/pages/flow/debug-content/index.less | 5 - web/src/pages/flow/debug-content/index.tsx | 238 -- .../pages/flow/debug-content/popover-form.tsx | 74 - web/src/pages/flow/flow-drawer/index.less | 21 - web/src/pages/flow/flow-drawer/index.tsx | 216 -- .../flow-drawer/single-debug-drawer/index.tsx | 81 - web/src/pages/flow/flow-id-modal/index.less | 3 - web/src/pages/flow/flow-id-modal/index.tsx | 36 - web/src/pages/flow/flow-sider/index.less | 16 - web/src/pages/flow/flow-sider/index.tsx | 75 - web/src/pages/flow/flow-tooltip.tsx | 19 - web/src/pages/flow/form-hooks.ts | 77 - .../pages/flow/form/akshare-form/index.tsx | 21 - web/src/pages/flow/form/answer-form/index.tsx | 5 - web/src/pages/flow/form/arxiv-form/index.tsx | 36 - .../flow/form/baidu-fanyi-form/index.tsx | 71 - web/src/pages/flow/form/baidu-form/index.tsx | 21 - .../form/begin-form/begin-dynamic-options.tsx | 68 - web/src/pages/flow/form/begin-form/hooks.ts | 50 - web/src/pages/flow/form/begin-form/index.less | 24 - web/src/pages/flow/form/begin-form/index.tsx | 111 - .../flow/form/begin-form/paramater-modal.tsx | 124 - .../flow/form/begin-form/query-table.tsx | 92 - web/src/pages/flow/form/bing-form/index.tsx | 42 - .../categorize-form/dynamic-categorize.tsx | 225 -- .../pages/flow/form/categorize-form/hooks.ts | 45 - .../flow/form/categorize-form/index.less | 13 - .../pages/flow/form/categorize-form/index.tsx | 43 - .../components/dynamic-input-variable.tsx | 130 - web/src/pages/flow/form/components/index.less | 22 - .../flow/form/concentrator-form/index.tsx | 17 - .../pages/flow/form/crawler-form/index.tsx | 38 - web/src/pages/flow/form/deepl-form/index.tsx | 36 - .../pages/flow/form/duckduckgo-form/index.tsx | 38 - web/src/pages/flow/form/email-form/index.tsx | 53 - web/src/pages/flow/form/exesql-form/index.tsx | 88 - .../form/generate-form/dynamic-parameters.tsx | 101 - .../pages/flow/form/generate-form/hooks.ts | 70 - .../pages/flow/form/generate-form/index.less | 21 - .../pages/flow/form/generate-form/index.tsx | 57 - web/src/pages/flow/form/github-form/index.tsx | 21 - web/src/pages/flow/form/google-form/index.tsx | 34 - .../flow/form/google-scholar-form/index.tsx | 75 - .../form/invoke-form/dynamic-variables.tsx | 130 - web/src/pages/flow/form/invoke-form/hooks.ts | 97 - .../pages/flow/form/invoke-form/index.less | 44 - web/src/pages/flow/form/invoke-form/index.tsx | 87 - .../pages/flow/form/iteration-from/index.tsx | 94 - web/src/pages/flow/form/jin10-form/index.tsx | 145 - .../flow/form/keyword-extract-form/index.tsx | 32 - .../pages/flow/form/message-form/index.less | 16 - .../pages/flow/form/message-form/index.tsx | 87 - web/src/pages/flow/form/pubmed-form/index.tsx | 32 - .../pages/flow/form/qweather-form/index.tsx | 88 - .../pages/flow/form/relevant-form/hooks.ts | 53 - .../pages/flow/form/relevant-form/index.tsx | 49 - .../pages/flow/form/retrieval-form/index.tsx | 58 - .../flow/form/rewrite-question-form/index.tsx | 41 - .../pages/flow/form/switch-form/index.less | 21 - web/src/pages/flow/form/switch-form/index.tsx | 204 -- .../pages/flow/form/template-form/index.tsx | 24 - .../pages/flow/form/tushare-form/index.tsx | 83 - web/src/pages/flow/form/wencai-form/index.tsx | 36 - .../pages/flow/form/wikipedia-form/index.tsx | 28 - .../flow/form/yahoo-finance-form/index.tsx | 40 - web/src/pages/flow/header/index.less | 3 - web/src/pages/flow/header/index.tsx | 102 - web/src/pages/flow/headhunter_zh.json | 397 --- web/src/pages/flow/hooks.tsx | 567 ---- .../pages/flow/hooks/use-before-delete.tsx | 57 - web/src/pages/flow/hooks/use-build-dsl.ts | 29 - web/src/pages/flow/hooks/use-export-json.ts | 62 - web/src/pages/flow/hooks/use-fetch-data.ts | 19 - .../pages/flow/hooks/use-get-begin-query.tsx | 113 - web/src/pages/flow/hooks/use-iteration.ts | 0 web/src/pages/flow/hooks/use-open-document.ts | 12 - web/src/pages/flow/hooks/use-save-graph.ts | 85 - web/src/pages/flow/hooks/use-set-graph.ts | 17 - web/src/pages/flow/hooks/use-show-drawer.tsx | 153 - web/src/pages/flow/index.tsx | 45 - web/src/pages/flow/interface.ts | 30 - web/src/pages/flow/interpreter.json | 75 - .../pages/flow/json-upload-modal/index.less | 13 - .../pages/flow/json-upload-modal/index.tsx | 97 - .../pages/flow/list/agent-template-modal.tsx | 121 - .../pages/flow/list/create-agent-modal.tsx | 54 - web/src/pages/flow/list/flow-card/index.less | 76 - web/src/pages/flow/list/flow-card/index.tsx | 60 - web/src/pages/flow/list/graph-avatar.tsx | 16 - web/src/pages/flow/list/hooks.ts | 53 - web/src/pages/flow/list/index.less | 99 - web/src/pages/flow/list/index.tsx | 56 - web/src/pages/flow/mock.tsx | 183 - web/src/pages/flow/operator-icon/index.less | 6 - web/src/pages/flow/operator-icon/index.tsx | 24 - ...trieval_relevant_rewrite_and_generate.json | 160 - web/src/pages/flow/run-drawer/index.less | 5 - web/src/pages/flow/run-drawer/index.tsx | 62 - .../pages/flow/run-drawer/popover-form.tsx | 74 - web/src/pages/flow/store.ts | 455 --- web/src/pages/flow/utils.test.ts | 106 - web/src/pages/flow/utils.ts | 418 --- web/src/pages/next-searches/index.tsx | 10 +- web/src/routes.ts | 32 - 270 files changed, 10 insertions(+), 27428 deletions(-) delete mode 100644 web/src/hooks/flow-hooks.ts delete mode 100644 web/src/pages/agent/agent-sidebar.tsx delete mode 100644 web/src/pages/agent/canvas/context-menu/index.less delete mode 100644 web/src/pages/agent/canvas/context-menu/index.tsx delete mode 100644 web/src/pages/agent/canvas/edge/index.less delete mode 100644 web/src/pages/agent/canvas/edge/index.tsx delete mode 100644 web/src/pages/agent/canvas/index.less delete mode 100644 web/src/pages/agent/canvas/index.tsx delete mode 100644 web/src/pages/agent/canvas/node/begin-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/card.tsx delete mode 100644 web/src/pages/agent/canvas/node/categorize-handle.tsx delete mode 100644 web/src/pages/agent/canvas/node/categorize-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/dropdown.tsx delete mode 100644 web/src/pages/agent/canvas/node/email-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/generate-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/handle-icon.tsx delete mode 100644 web/src/pages/agent/canvas/node/hooks.ts delete mode 100644 web/src/pages/agent/canvas/node/index.less delete mode 100644 web/src/pages/agent/canvas/node/index.tsx delete mode 100644 web/src/pages/agent/canvas/node/invoke-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/iteration-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/keyword-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/logic-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/message-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/node-header.tsx delete mode 100644 web/src/pages/agent/canvas/node/note-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/popover.tsx delete mode 100644 web/src/pages/agent/canvas/node/relevant-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/retrieval-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/rewrite-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/switch-node.tsx delete mode 100644 web/src/pages/agent/canvas/node/template-node.tsx delete mode 100644 web/src/pages/agent/constant.tsx delete mode 100644 web/src/pages/agent/context.ts delete mode 100644 web/src/pages/agent/debug-content/index.less delete mode 100644 web/src/pages/agent/debug-content/index.tsx delete mode 100644 web/src/pages/agent/debug-content/popover-form.tsx delete mode 100644 web/src/pages/agent/flow-tooltip.tsx delete mode 100644 web/src/pages/agent/form-hooks.ts delete mode 100644 web/src/pages/agent/form-sheet/index.less delete mode 100644 web/src/pages/agent/form-sheet/index.tsx delete mode 100644 web/src/pages/agent/form-sheet/next.tsx delete mode 100644 web/src/pages/agent/form-sheet/single-debug-drawer/index.tsx delete mode 100644 web/src/pages/agent/form-sheet/use-form-config-map.tsx delete mode 100644 web/src/pages/agent/form/akshare-form/index.tsx delete mode 100644 web/src/pages/agent/form/answer-form/index.tsx delete mode 100644 web/src/pages/agent/form/arxiv-form/index.tsx delete mode 100644 web/src/pages/agent/form/baidu-fanyi-form/index.tsx delete mode 100644 web/src/pages/agent/form/baidu-form/index.tsx delete mode 100644 web/src/pages/agent/form/begin-form/begin-dynamic-options.tsx delete mode 100644 web/src/pages/agent/form/begin-form/hooks.ts delete mode 100644 web/src/pages/agent/form/begin-form/index.less delete mode 100644 web/src/pages/agent/form/begin-form/index.tsx delete mode 100644 web/src/pages/agent/form/begin-form/paramater-modal.tsx delete mode 100644 web/src/pages/agent/form/begin-form/query-table.tsx delete mode 100644 web/src/pages/agent/form/bing-form/index.tsx delete mode 100644 web/src/pages/agent/form/categorize-form/dynamic-categorize.tsx delete mode 100644 web/src/pages/agent/form/categorize-form/hooks.ts delete mode 100644 web/src/pages/agent/form/categorize-form/index.less delete mode 100644 web/src/pages/agent/form/categorize-form/index.tsx delete mode 100644 web/src/pages/agent/form/components/dynamic-input-variable.tsx delete mode 100644 web/src/pages/agent/form/components/index.less delete mode 100644 web/src/pages/agent/form/components/next-dynamic-input-variable.tsx delete mode 100644 web/src/pages/agent/form/concentrator-form/index.tsx delete mode 100644 web/src/pages/agent/form/crawler-form/index.tsx delete mode 100644 web/src/pages/agent/form/deepl-form/index.tsx delete mode 100644 web/src/pages/agent/form/duckduckgo-form/index.tsx delete mode 100644 web/src/pages/agent/form/email-form/index.tsx delete mode 100644 web/src/pages/agent/form/exesql-form/index.tsx delete mode 100644 web/src/pages/agent/form/generate-form/index.tsx delete mode 100644 web/src/pages/agent/form/github-form/index.tsx delete mode 100644 web/src/pages/agent/form/google-form/index.tsx delete mode 100644 web/src/pages/agent/form/google-scholar-form/index.tsx delete mode 100644 web/src/pages/agent/form/invoke-form/dynamic-variables.tsx delete mode 100644 web/src/pages/agent/form/invoke-form/hooks.ts delete mode 100644 web/src/pages/agent/form/invoke-form/index.less delete mode 100644 web/src/pages/agent/form/invoke-form/index.tsx delete mode 100644 web/src/pages/agent/form/iteration-from/index.tsx delete mode 100644 web/src/pages/agent/form/jin10-form/index.tsx delete mode 100644 web/src/pages/agent/form/keyword-extract-form/index.tsx delete mode 100644 web/src/pages/agent/form/message-form/index.less delete mode 100644 web/src/pages/agent/form/message-form/index.tsx delete mode 100644 web/src/pages/agent/form/pubmed-form/index.tsx delete mode 100644 web/src/pages/agent/form/qweather-form/index.tsx delete mode 100644 web/src/pages/agent/form/relevant-form/hooks.ts delete mode 100644 web/src/pages/agent/form/relevant-form/index.tsx delete mode 100644 web/src/pages/agent/form/retrieval-form/index.tsx delete mode 100644 web/src/pages/agent/form/retrieval-form/next.tsx delete mode 100644 web/src/pages/agent/form/rewrite-question-form/index.tsx delete mode 100644 web/src/pages/agent/form/switch-form/index.less delete mode 100644 web/src/pages/agent/form/switch-form/index.tsx delete mode 100644 web/src/pages/agent/form/template-form/index.tsx delete mode 100644 web/src/pages/agent/form/tushare-form/index.tsx delete mode 100644 web/src/pages/agent/form/wencai-form/index.tsx delete mode 100644 web/src/pages/agent/form/wikipedia-form/index.tsx delete mode 100644 web/src/pages/agent/form/yahoo-finance-form/index.tsx delete mode 100644 web/src/pages/agent/hooks.tsx delete mode 100644 web/src/pages/agent/hooks/use-before-delete.tsx delete mode 100644 web/src/pages/agent/hooks/use-build-dsl.ts delete mode 100644 web/src/pages/agent/hooks/use-export-json.ts delete mode 100644 web/src/pages/agent/hooks/use-fetch-data.ts delete mode 100644 web/src/pages/agent/hooks/use-get-begin-query.tsx delete mode 100644 web/src/pages/agent/hooks/use-iteration.ts delete mode 100644 web/src/pages/agent/hooks/use-open-document.ts delete mode 100644 web/src/pages/agent/hooks/use-save-graph.ts delete mode 100644 web/src/pages/agent/hooks/use-set-graph.ts delete mode 100644 web/src/pages/agent/hooks/use-show-drawer.tsx delete mode 100644 web/src/pages/agent/index.tsx delete mode 100644 web/src/pages/agent/interface.ts delete mode 100644 web/src/pages/agent/operator-icon.tsx delete mode 100644 web/src/pages/agent/store.ts delete mode 100644 web/src/pages/agent/upload-agent-dialog/index.tsx delete mode 100644 web/src/pages/agent/upload-agent-dialog/upload-agent-form.tsx delete mode 100644 web/src/pages/agent/utils.test.ts delete mode 100644 web/src/pages/agent/utils.ts delete mode 100644 web/src/pages/agents/agent-card.tsx delete mode 100644 web/src/pages/agents/agent-templates.tsx delete mode 100644 web/src/pages/agents/create-agent-dialog.tsx delete mode 100644 web/src/pages/agents/create-agent-form.tsx delete mode 100644 web/src/pages/agents/index.tsx delete mode 100644 web/src/pages/agents/template-card.tsx delete mode 100644 web/src/pages/flow/canvas/context-menu/index.less delete mode 100644 web/src/pages/flow/canvas/context-menu/index.tsx delete mode 100644 web/src/pages/flow/canvas/edge/index.less delete mode 100644 web/src/pages/flow/canvas/edge/index.tsx delete mode 100644 web/src/pages/flow/canvas/index.less delete mode 100644 web/src/pages/flow/canvas/index.tsx delete mode 100644 web/src/pages/flow/canvas/node/begin-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/card.tsx delete mode 100644 web/src/pages/flow/canvas/node/categorize-handle.tsx delete mode 100644 web/src/pages/flow/canvas/node/categorize-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/dropdown.tsx delete mode 100644 web/src/pages/flow/canvas/node/email-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/generate-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/handle-icon.tsx delete mode 100644 web/src/pages/flow/canvas/node/hooks.ts delete mode 100644 web/src/pages/flow/canvas/node/index.less delete mode 100644 web/src/pages/flow/canvas/node/index.tsx delete mode 100644 web/src/pages/flow/canvas/node/invoke-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/iteration-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/keyword-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/logic-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/message-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/node-header.tsx delete mode 100644 web/src/pages/flow/canvas/node/note-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/popover.tsx delete mode 100644 web/src/pages/flow/canvas/node/relevant-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/retrieval-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/rewrite-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/switch-node.tsx delete mode 100644 web/src/pages/flow/canvas/node/template-node.tsx delete mode 100644 web/src/pages/flow/chat/box.tsx delete mode 100644 web/src/pages/flow/chat/drawer.tsx delete mode 100644 web/src/pages/flow/chat/hooks.ts delete mode 100644 web/src/pages/flow/chat/index.less delete mode 100644 web/src/pages/flow/constant.tsx delete mode 100644 web/src/pages/flow/context.ts delete mode 100644 web/src/pages/flow/customer_service.json delete mode 100644 web/src/pages/flow/debug-content/index.less delete mode 100644 web/src/pages/flow/debug-content/index.tsx delete mode 100644 web/src/pages/flow/debug-content/popover-form.tsx delete mode 100644 web/src/pages/flow/flow-drawer/index.less delete mode 100644 web/src/pages/flow/flow-drawer/index.tsx delete mode 100644 web/src/pages/flow/flow-drawer/single-debug-drawer/index.tsx delete mode 100644 web/src/pages/flow/flow-id-modal/index.less delete mode 100644 web/src/pages/flow/flow-id-modal/index.tsx delete mode 100644 web/src/pages/flow/flow-sider/index.less delete mode 100644 web/src/pages/flow/flow-sider/index.tsx delete mode 100644 web/src/pages/flow/flow-tooltip.tsx delete mode 100644 web/src/pages/flow/form-hooks.ts delete mode 100644 web/src/pages/flow/form/akshare-form/index.tsx delete mode 100644 web/src/pages/flow/form/answer-form/index.tsx delete mode 100644 web/src/pages/flow/form/arxiv-form/index.tsx delete mode 100644 web/src/pages/flow/form/baidu-fanyi-form/index.tsx delete mode 100644 web/src/pages/flow/form/baidu-form/index.tsx delete mode 100644 web/src/pages/flow/form/begin-form/begin-dynamic-options.tsx delete mode 100644 web/src/pages/flow/form/begin-form/hooks.ts delete mode 100644 web/src/pages/flow/form/begin-form/index.less delete mode 100644 web/src/pages/flow/form/begin-form/index.tsx delete mode 100644 web/src/pages/flow/form/begin-form/paramater-modal.tsx delete mode 100644 web/src/pages/flow/form/begin-form/query-table.tsx delete mode 100644 web/src/pages/flow/form/bing-form/index.tsx delete mode 100644 web/src/pages/flow/form/categorize-form/dynamic-categorize.tsx delete mode 100644 web/src/pages/flow/form/categorize-form/hooks.ts delete mode 100644 web/src/pages/flow/form/categorize-form/index.less delete mode 100644 web/src/pages/flow/form/categorize-form/index.tsx delete mode 100644 web/src/pages/flow/form/components/dynamic-input-variable.tsx delete mode 100644 web/src/pages/flow/form/components/index.less delete mode 100644 web/src/pages/flow/form/concentrator-form/index.tsx delete mode 100644 web/src/pages/flow/form/crawler-form/index.tsx delete mode 100644 web/src/pages/flow/form/deepl-form/index.tsx delete mode 100644 web/src/pages/flow/form/duckduckgo-form/index.tsx delete mode 100644 web/src/pages/flow/form/email-form/index.tsx delete mode 100644 web/src/pages/flow/form/exesql-form/index.tsx delete mode 100644 web/src/pages/flow/form/generate-form/dynamic-parameters.tsx delete mode 100644 web/src/pages/flow/form/generate-form/hooks.ts delete mode 100644 web/src/pages/flow/form/generate-form/index.less delete mode 100644 web/src/pages/flow/form/generate-form/index.tsx delete mode 100644 web/src/pages/flow/form/github-form/index.tsx delete mode 100644 web/src/pages/flow/form/google-form/index.tsx delete mode 100644 web/src/pages/flow/form/google-scholar-form/index.tsx delete mode 100644 web/src/pages/flow/form/invoke-form/dynamic-variables.tsx delete mode 100644 web/src/pages/flow/form/invoke-form/hooks.ts delete mode 100644 web/src/pages/flow/form/invoke-form/index.less delete mode 100644 web/src/pages/flow/form/invoke-form/index.tsx delete mode 100644 web/src/pages/flow/form/iteration-from/index.tsx delete mode 100644 web/src/pages/flow/form/jin10-form/index.tsx delete mode 100644 web/src/pages/flow/form/keyword-extract-form/index.tsx delete mode 100644 web/src/pages/flow/form/message-form/index.less delete mode 100644 web/src/pages/flow/form/message-form/index.tsx delete mode 100644 web/src/pages/flow/form/pubmed-form/index.tsx delete mode 100644 web/src/pages/flow/form/qweather-form/index.tsx delete mode 100644 web/src/pages/flow/form/relevant-form/hooks.ts delete mode 100644 web/src/pages/flow/form/relevant-form/index.tsx delete mode 100644 web/src/pages/flow/form/retrieval-form/index.tsx delete mode 100644 web/src/pages/flow/form/rewrite-question-form/index.tsx delete mode 100644 web/src/pages/flow/form/switch-form/index.less delete mode 100644 web/src/pages/flow/form/switch-form/index.tsx delete mode 100644 web/src/pages/flow/form/template-form/index.tsx delete mode 100644 web/src/pages/flow/form/tushare-form/index.tsx delete mode 100644 web/src/pages/flow/form/wencai-form/index.tsx delete mode 100644 web/src/pages/flow/form/wikipedia-form/index.tsx delete mode 100644 web/src/pages/flow/form/yahoo-finance-form/index.tsx delete mode 100644 web/src/pages/flow/header/index.less delete mode 100644 web/src/pages/flow/header/index.tsx delete mode 100644 web/src/pages/flow/headhunter_zh.json delete mode 100644 web/src/pages/flow/hooks.tsx delete mode 100644 web/src/pages/flow/hooks/use-before-delete.tsx delete mode 100644 web/src/pages/flow/hooks/use-build-dsl.ts delete mode 100644 web/src/pages/flow/hooks/use-export-json.ts delete mode 100644 web/src/pages/flow/hooks/use-fetch-data.ts delete mode 100644 web/src/pages/flow/hooks/use-get-begin-query.tsx delete mode 100644 web/src/pages/flow/hooks/use-iteration.ts delete mode 100644 web/src/pages/flow/hooks/use-open-document.ts delete mode 100644 web/src/pages/flow/hooks/use-save-graph.ts delete mode 100644 web/src/pages/flow/hooks/use-set-graph.ts delete mode 100644 web/src/pages/flow/hooks/use-show-drawer.tsx delete mode 100644 web/src/pages/flow/index.tsx delete mode 100644 web/src/pages/flow/interface.ts delete mode 100644 web/src/pages/flow/interpreter.json delete mode 100644 web/src/pages/flow/json-upload-modal/index.less delete mode 100644 web/src/pages/flow/json-upload-modal/index.tsx delete mode 100644 web/src/pages/flow/list/agent-template-modal.tsx delete mode 100644 web/src/pages/flow/list/create-agent-modal.tsx delete mode 100644 web/src/pages/flow/list/flow-card/index.less delete mode 100644 web/src/pages/flow/list/flow-card/index.tsx delete mode 100644 web/src/pages/flow/list/graph-avatar.tsx delete mode 100644 web/src/pages/flow/list/hooks.ts delete mode 100644 web/src/pages/flow/list/index.less delete mode 100644 web/src/pages/flow/list/index.tsx delete mode 100644 web/src/pages/flow/mock.tsx delete mode 100644 web/src/pages/flow/operator-icon/index.less delete mode 100644 web/src/pages/flow/operator-icon/index.tsx delete mode 100644 web/src/pages/flow/retrieval_relevant_rewrite_and_generate.json delete mode 100644 web/src/pages/flow/run-drawer/index.less delete mode 100644 web/src/pages/flow/run-drawer/index.tsx delete mode 100644 web/src/pages/flow/run-drawer/popover-form.tsx delete mode 100644 web/src/pages/flow/store.ts delete mode 100644 web/src/pages/flow/utils.test.ts delete mode 100644 web/src/pages/flow/utils.ts diff --git a/web/src/components/api-service/hooks.ts b/web/src/components/api-service/hooks.ts index 16878d8..6543585 100644 --- a/web/src/components/api-service/hooks.ts +++ b/web/src/components/api-service/hooks.ts @@ -155,13 +155,7 @@ export const usePreviewChat = (idKey: string) => { const open = useCallback( (t: string) => { - window.open( - getUrlWithToken( - t, - idKey === 'canvasId' ? SharedFrom.Agent : SharedFrom.Chat, - ), - '_blank', - ); + window.open(getUrlWithToken(t, SharedFrom.Chat), '_blank'); }, [idKey], ); diff --git a/web/src/components/prompt-editor/variable-node.tsx b/web/src/components/prompt-editor/variable-node.tsx index e2a8cc2..8f59a6a 100644 --- a/web/src/components/prompt-editor/variable-node.tsx +++ b/web/src/components/prompt-editor/variable-node.tsx @@ -1,8 +1,5 @@ -import i18n from '@/locales/config'; -import { BeginId } from '@/pages/flow/constant'; import { DecoratorNode, LexicalNode, NodeKey } from 'lexical'; import { ReactNode } from 'react'; -const prefix = BeginId + '@'; export class VariableNode extends DecoratorNode { __value: string; @@ -37,13 +34,6 @@ export class VariableNode extends DecoratorNode { let content: ReactNode = ( {this.__label} ); - if (this.__value.startsWith(prefix)) { - content = ( -
- {i18n.t(`flow.begin`)} / {content} -
- ); - } return (
{content} diff --git a/web/src/components/prompt-editor/variable-picker-plugin.tsx b/web/src/components/prompt-editor/variable-picker-plugin.tsx index b50e540..de5588e 100644 --- a/web/src/components/prompt-editor/variable-picker-plugin.tsx +++ b/web/src/components/prompt-editor/variable-picker-plugin.tsx @@ -29,8 +29,6 @@ import { } from 'react'; import * as ReactDOM from 'react-dom'; -import { FlowFormContext } from '@/pages/flow/context'; -import { useBuildComponentIdSelectOptions } from '@/pages/flow/hooks/use-get-begin-query'; import { $createVariableNode } from './variable-node'; import { ProgrammaticTag } from './constant'; diff --git a/web/src/constants/chat.ts b/web/src/constants/chat.ts index 53f99b1..bfcd885 100644 --- a/web/src/constants/chat.ts +++ b/web/src/constants/chat.ts @@ -20,7 +20,6 @@ export const variableEnabledFieldMap = { }; export enum SharedFrom { - Agent = 'agent', Chat = 'chat', } diff --git a/web/src/hooks/flow-hooks.ts b/web/src/hooks/flow-hooks.ts deleted file mode 100644 index 5a0964d..0000000 --- a/web/src/hooks/flow-hooks.ts +++ /dev/null @@ -1,308 +0,0 @@ -import { ResponseType } from '@/interfaces/database/base'; -import { DSL, IFlow, IFlowTemplate } from '@/interfaces/database/flow'; -import { IDebugSingleRequestBody } from '@/interfaces/request/flow'; -import i18n from '@/locales/config'; -import { useGetSharedChatSearchParams } from '@/pages/chat/shared-hooks'; -import { BeginId } from '@/pages/flow/constant'; -import flowService from '@/services/flow-service'; -import { buildMessageListWithUuid } from '@/utils/chat'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { message } from 'antd'; -import { set } from 'lodash'; -import get from 'lodash/get'; -import { useParams } from 'umi'; -import { v4 as uuid } from 'uuid'; - -export const EmptyDsl = { - graph: { - nodes: [ - { - id: BeginId, - type: 'beginNode', - position: { - x: 50, - y: 200, - }, - data: { - label: 'Begin', - name: 'begin', - }, - sourcePosition: 'left', - targetPosition: 'right', - }, - ], - edges: [], - }, - components: { - begin: { - obj: { - component_name: 'Begin', - params: {}, - }, - downstream: ['Answer:China'], // other edge target is downstream, edge source is current node id - upstream: [], // edge source is upstream, edge target is current node id - }, - }, - messages: [], - reference: [], - history: [], - path: [], - answer: [], -}; - -export const useFetchFlowTemplates = (): ResponseType => { - const { data } = useQuery({ - queryKey: ['fetchFlowTemplates'], - initialData: [], - queryFn: async () => { - const { data } = await flowService.listTemplates(); - if (Array.isArray(data?.data)) { - data.data.unshift({ - id: uuid(), - title: 'Blank', - description: 'Create your agent from scratch', - dsl: EmptyDsl, - }); - } - - return data; - }, - }); - - return data; -}; - -export const useFetchFlowList = (): { data: IFlow[]; loading: boolean } => { - const { data, isFetching: loading } = useQuery({ - queryKey: ['fetchFlowList'], - initialData: [], - gcTime: 0, - queryFn: async () => { - const { data } = await flowService.listCanvas(); - - return data?.data ?? []; - }, - }); - - return { data, loading }; -}; - -export const useFetchFlow = (): { - data: IFlow; - loading: boolean; - refetch: () => void; -} => { - const { id } = useParams(); - const { sharedId } = useGetSharedChatSearchParams(); - - const { - data, - isFetching: loading, - refetch, - } = useQuery({ - queryKey: ['flowDetail'], - initialData: {} as IFlow, - refetchOnReconnect: false, - refetchOnMount: false, - refetchOnWindowFocus: false, - gcTime: 0, - queryFn: async () => { - const { data } = await flowService.getCanvas({}, sharedId || id); - - const messageList = buildMessageListWithUuid( - get(data, 'data.dsl.messages', []), - ); - set(data, 'data.dsl.messages', messageList); - - return data?.data ?? {}; - }, - }); - - return { data, loading, refetch }; -}; - -export const useFetchFlowSSE = (): { - data: IFlow; - loading: boolean; - refetch: () => void; -} => { - const { sharedId } = useGetSharedChatSearchParams(); - - const { - data, - isFetching: loading, - refetch, - } = useQuery({ - queryKey: ['flowDetailSSE'], - initialData: {} as IFlow, - refetchOnReconnect: false, - refetchOnMount: false, - refetchOnWindowFocus: false, - gcTime: 0, - queryFn: async () => { - if (!sharedId) return {}; - const { data } = await flowService.getCanvasSSE({}, sharedId); - - const messageList = buildMessageListWithUuid( - get(data, 'data.dsl.messages', []), - ); - set(data, 'data.dsl.messages', messageList); - - return data?.data ?? {}; - }, - }); - - return { data, loading, refetch }; -}; - -export const useSetFlow = () => { - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['setFlow'], - mutationFn: async (params: { - id?: string; - title?: string; - dsl?: DSL; - avatar?: string; - }) => { - const { data = {} } = await flowService.setCanvas(params); - if (data.code === 0) { - message.success( - i18n.t(`message.${params?.id ? 'modified' : 'created'}`), - ); - queryClient.invalidateQueries({ queryKey: ['fetchFlowList'] }); - } - return data; - }, - }); - - return { data, loading, setFlow: mutateAsync }; -}; - -export const useDeleteFlow = () => { - const queryClient = useQueryClient(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['deleteFlow'], - mutationFn: async (canvasIds: string[]) => { - const { data } = await flowService.removeCanvas({ canvasIds }); - if (data.code === 0) { - queryClient.invalidateQueries({ queryKey: ['fetchFlowList'] }); - } - return data?.data ?? []; - }, - }); - - return { data, loading, deleteFlow: mutateAsync }; -}; - -export const useRunFlow = () => { - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['runFlow'], - mutationFn: async (params: { id: string; dsl: DSL }) => { - const { data } = await flowService.runCanvas(params); - if (data.code === 0) { - message.success(i18n.t(`message.modified`)); - } - return data?.data ?? {}; - }, - }); - - return { data, loading, runFlow: mutateAsync }; -}; - -export const useResetFlow = () => { - const { id } = useParams(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['resetFlow'], - mutationFn: async () => { - const { data } = await flowService.resetCanvas({ id }); - return data; - }, - }); - - return { data, loading, resetFlow: mutateAsync }; -}; - -export const useTestDbConnect = () => { - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['testDbConnect'], - mutationFn: async (params: any) => { - const ret = await flowService.testDbConnect(params); - if (ret?.data?.code === 0) { - message.success(ret?.data?.data); - } else { - message.error(ret?.data?.data); - } - return ret; - }, - }); - - return { data, loading, testDbConnect: mutateAsync }; -}; - -export const useFetchInputElements = (componentId?: string) => { - const { id } = useParams(); - - const { data, isPending: loading } = useQuery({ - queryKey: ['fetchInputElements', id, componentId], - initialData: [], - enabled: !!id && !!componentId, - retryOnMount: false, - refetchOnWindowFocus: false, - refetchOnReconnect: false, - gcTime: 0, - queryFn: async () => { - try { - const { data } = await flowService.getInputElements({ - id, - component_id: componentId, - }); - return data?.data ?? []; - } catch (error) { - console.log('🚀 ~ queryFn: ~ error:', error); - } - }, - }); - - return { data, loading }; -}; - -export const useDebugSingle = () => { - const { id } = useParams(); - const { - data, - isPending: loading, - mutateAsync, - } = useMutation({ - mutationKey: ['debugSingle'], - mutationFn: async (params: IDebugSingleRequestBody) => { - const ret = await flowService.debugSingle({ id, ...params }); - if (ret?.data?.code !== 0) { - message.error(ret?.data?.message); - } - return ret?.data?.data; - }, - }); - - return { data, loading, debugSingle: mutateAsync }; -}; diff --git a/web/src/hooks/logic-hooks/navigate-hooks.ts b/web/src/hooks/logic-hooks/navigate-hooks.ts index ef6f155..140be78 100644 --- a/web/src/hooks/logic-hooks/navigate-hooks.ts +++ b/web/src/hooks/logic-hooks/navigate-hooks.ts @@ -38,21 +38,6 @@ export const useNavigatePage = () => { navigate(Routes.Chat); }, [navigate]); - const navigateToAgentList = useCallback(() => { - navigate(Routes.Agents); - }, [navigate]); - - const navigateToAgent = useCallback( - (id: string) => () => { - navigate(`${Routes.Agent}/${id}`); - }, - [navigate], - ); - - const navigateToAgentTemplates = useCallback(() => { - navigate(Routes.AgentTemplates); - }, [navigate]); - const navigateToSearchList = useCallback(() => { navigate(Routes.Searches); }, [navigate]); @@ -104,9 +89,7 @@ export const useNavigatePage = () => { navigateToChunkParsedResult, getQueryString, navigateToChunk, - navigateToAgentList, - navigateToAgent, - navigateToAgentTemplates, + navigateToSearchList, navigateToSearch, }; diff --git a/web/src/layouts/next-header.tsx b/web/src/layouts/next-header.tsx index a2e6ff8..14cd11f 100644 --- a/web/src/layouts/next-header.tsx +++ b/web/src/layouts/next-header.tsx @@ -9,7 +9,6 @@ import { cn } from '@/lib/utils'; import { Routes } from '@/routes'; import { ChevronDown, - Cpu, File, Github, House, @@ -33,7 +32,6 @@ export function Header() { { path: Routes.Datasets, name: t('knowledgeBase'), icon: Library }, { path: Routes.Chats, name: t('chat'), icon: MessageSquareText }, { path: Routes.Searches, name: t('search'), icon: Search }, - { path: Routes.Agents, name: t('flow'), icon: Cpu }, { path: Routes.Files, name: t('fileManager'), icon: File }, ], [t], diff --git a/web/src/locales/config.ts b/web/src/locales/config.ts index 10e5f69..845793f 100644 --- a/web/src/locales/config.ts +++ b/web/src/locales/config.ts @@ -3,14 +3,8 @@ import LanguageDetector from 'i18next-browser-languagedetector'; import { initReactI18next } from 'react-i18next'; import { LanguageAbbreviation } from '@/constants/common'; -import translation_de from './de'; import translation_en from './en'; -import translation_es from './es'; -import translation_id from './id'; -import translation_ja from './ja'; -import translation_pt_br from './pt-br'; import { createTranslationTable, flattenObject } from './until'; -import translation_vi from './vi'; import translation_zh from './zh'; import translation_zh_traditional from './zh-traditional'; @@ -18,42 +12,16 @@ const resources = { [LanguageAbbreviation.En]: translation_en, [LanguageAbbreviation.Zh]: translation_zh, [LanguageAbbreviation.ZhTraditional]: translation_zh_traditional, - [LanguageAbbreviation.Id]: translation_id, - [LanguageAbbreviation.Ja]: translation_ja, - [LanguageAbbreviation.Es]: translation_es, - [LanguageAbbreviation.Vi]: translation_vi, - [LanguageAbbreviation.PtBr]: translation_pt_br, - [LanguageAbbreviation.De]: translation_de, }; const enFlattened = flattenObject(translation_en); -const viFlattened = flattenObject(translation_vi); -const esFlattened = flattenObject(translation_es); + const zhFlattened = flattenObject(translation_zh); -const jaFlattened = flattenObject(translation_ja); -const pt_brFlattened = flattenObject(translation_pt_br); + const zh_traditionalFlattened = flattenObject(translation_zh_traditional); -const deFlattened = flattenObject(translation_de); + export const translationTable = createTranslationTable( - [ - enFlattened, - viFlattened, - esFlattened, - zhFlattened, - zh_traditionalFlattened, - jaFlattened, - pt_brFlattened, - deFlattened, - ], - [ - 'English', - 'Vietnamese', - 'Spanish', - 'zh', - 'zh-TRADITIONAL', - 'ja', - 'pt-BR', - 'Deutsch', - ], + [enFlattened, zhFlattened, zh_traditionalFlattened], + ['English', 'zh', 'zh-TRADITIONAL'], ); i18n .use(initReactI18next) diff --git a/web/src/pages/agent/agent-sidebar.tsx b/web/src/pages/agent/agent-sidebar.tsx deleted file mode 100644 index 42f399a..0000000 --- a/web/src/pages/agent/agent-sidebar.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import { SideDown } from '@/assets/icon/Icon'; -import { Card, CardContent } from '@/components/ui/card'; -import { - Collapsible, - CollapsibleContent, - CollapsibleTrigger, -} from '@/components/ui/collapsible'; -import { - Sidebar, - SidebarContent, - SidebarGroup, - SidebarGroupContent, - SidebarGroupLabel, - SidebarHeader, - SidebarMenu, -} from '@/components/ui/sidebar'; -import { useMemo } from 'react'; -import { - AgentOperatorList, - Operator, - componentMenuList, - operatorMap, -} from './constant'; -import OperatorIcon from './operator-icon'; - -type OperatorItem = { - name: Operator; -}; - -function OperatorCard({ name }: OperatorItem) { - return ( - - - - {name} - - - ); -} - -type OperatorCollapsibleProps = { operatorList: OperatorItem[]; title: string }; - -function OperatorCollapsible({ - operatorList, - title, -}: OperatorCollapsibleProps) { - return ( - - - - - {title} - - - - - - - {operatorList.map((item) => ( - - ))} - - - - - - ); -} - -export function AgentSidebar() { - const agentOperatorList = useMemo(() => { - return componentMenuList.filter((x) => - AgentOperatorList.some((y) => y === x.name), - ); - }, []); - - const thirdOperatorList = useMemo(() => { - return componentMenuList.filter( - (x) => !AgentOperatorList.some((y) => y === x.name), - ); - }, []); - - return ( - - -

All nodes

-
- - - - -
- ); -} diff --git a/web/src/pages/agent/canvas/context-menu/index.less b/web/src/pages/agent/canvas/context-menu/index.less deleted file mode 100644 index 5594aa9..0000000 --- a/web/src/pages/agent/canvas/context-menu/index.less +++ /dev/null @@ -1,18 +0,0 @@ -.contextMenu { - background: rgba(255, 255, 255, 0.1); - border-style: solid; - box-shadow: 10px 19px 20px rgba(0, 0, 0, 10%); - position: absolute; - z-index: 10; - button { - border: none; - display: block; - padding: 0.5em; - text-align: left; - width: 100%; - } - - button:hover { - background: rgba(255, 255, 255, 0.1); - } -} diff --git a/web/src/pages/agent/canvas/context-menu/index.tsx b/web/src/pages/agent/canvas/context-menu/index.tsx deleted file mode 100644 index 6cb306a..0000000 --- a/web/src/pages/agent/canvas/context-menu/index.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { NodeMouseHandler, useReactFlow } from '@xyflow/react'; -import { useCallback, useRef, useState } from 'react'; - -import styles from './index.less'; - -export interface INodeContextMenu { - id: string; - top: number; - left: number; - right?: number; - bottom?: number; - [key: string]: unknown; -} - -export function NodeContextMenu({ - id, - top, - left, - right, - bottom, - ...props -}: INodeContextMenu) { - const { getNode, setNodes, addNodes, setEdges } = useReactFlow(); - - const duplicateNode = useCallback(() => { - const node = getNode(id); - const position = { - x: node?.position?.x || 0 + 50, - y: node?.position?.y || 0 + 50, - }; - - addNodes({ - ...(node || {}), - data: node?.data, - selected: false, - dragging: false, - id: `${node?.id}-copy`, - position, - }); - }, [id, getNode, addNodes]); - - const deleteNode = useCallback(() => { - setNodes((nodes) => nodes.filter((node) => node.id !== id)); - setEdges((edges) => edges.filter((edge) => edge.source !== id)); - }, [id, setNodes, setEdges]); - - return ( -
-

- node: {id} -

- - -
- ); -} - -/* @deprecated - */ -export const useHandleNodeContextMenu = (sideWidth: number) => { - const [menu, setMenu] = useState({} as INodeContextMenu); - const ref = useRef(null); - - const onNodeContextMenu: NodeMouseHandler = useCallback( - (event, node) => { - // Prevent native context menu from showing - event.preventDefault(); - - // Calculate position of the context menu. We want to make sure it - // doesn't get positioned off-screen. - const pane = ref.current?.getBoundingClientRect(); - // setMenu({ - // id: node.id, - // top: event.clientY < pane.height - 200 ? event.clientY : 0, - // left: event.clientX < pane.width - 200 ? event.clientX : 0, - // right: event.clientX >= pane.width - 200 ? pane.width - event.clientX : 0, - // bottom: - // event.clientY >= pane.height - 200 ? pane.height - event.clientY : 0, - // }); - - setMenu({ - id: node.id, - top: event.clientY - 144, - left: event.clientX - sideWidth, - // top: event.clientY < pane.height - 200 ? event.clientY - 72 : 0, - // left: event.clientX < pane.width - 200 ? event.clientX : 0, - }); - }, - [sideWidth], - ); - - // Close the context menu if it's open whenever the window is clicked. - const onPaneClick = useCallback( - () => setMenu({} as INodeContextMenu), - [setMenu], - ); - - return { onNodeContextMenu, menu, onPaneClick, ref }; -}; diff --git a/web/src/pages/agent/canvas/edge/index.less b/web/src/pages/agent/canvas/edge/index.less deleted file mode 100644 index 281b672..0000000 --- a/web/src/pages/agent/canvas/edge/index.less +++ /dev/null @@ -1,31 +0,0 @@ -.edgeButton { - width: 14px; - height: 14px; - background: #eee; - border: 1px solid #fff; - padding: 0; - cursor: pointer; - border-radius: 50%; - font-size: 10px; - line-height: 1; -} - -.edgeButton:hover { - box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.08); -} - -.edgeButtonDark { - width: 14px; - height: 14px; - background: #0e0c0c; - border: 1px solid #fff; - padding: 0; - cursor: pointer; - border-radius: 50%; - font-size: 10px; - line-height: 1; -} - -.edgeButtonDark:hover { - box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.08); -} diff --git a/web/src/pages/agent/canvas/edge/index.tsx b/web/src/pages/agent/canvas/edge/index.tsx deleted file mode 100644 index 52f939b..0000000 --- a/web/src/pages/agent/canvas/edge/index.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import { - BaseEdge, - EdgeLabelRenderer, - EdgeProps, - getBezierPath, -} from '@xyflow/react'; -import useGraphStore from '../../store'; - -import { useTheme } from '@/components/theme-provider'; -import { useFetchFlow } from '@/hooks/flow-hooks'; -import { useMemo } from 'react'; -import styles from './index.less'; - -export function ButtonEdge({ - id, - sourceX, - sourceY, - targetX, - targetY, - sourcePosition, - targetPosition, - source, - target, - style = {}, - markerEnd, - selected, -}: EdgeProps) { - const deleteEdgeById = useGraphStore((state) => state.deleteEdgeById); - const [edgePath, labelX, labelY] = getBezierPath({ - sourceX, - sourceY, - sourcePosition, - targetX, - targetY, - targetPosition, - }); - const { theme } = useTheme(); - const selectedStyle = useMemo(() => { - return selected ? { strokeWidth: 2, stroke: '#1677ff' } : {}; - }, [selected]); - - const onEdgeClick = () => { - deleteEdgeById(id); - }; - - // highlight the nodes that the workflow passes through - const { data: flowDetail } = useFetchFlow(); - - const graphPath = useMemo(() => { - // TODO: this will be called multiple times - const path = flowDetail?.dsl?.path ?? []; - // The second to last - const previousGraphPath: string[] = path.at(-2) ?? []; - let graphPath: string[] = path.at(-1) ?? []; - // The last of the second to last article - const previousLatestElement = previousGraphPath.at(-1); - if (previousGraphPath.length > 0 && previousLatestElement) { - graphPath = [previousLatestElement, ...graphPath]; - } - return graphPath; - }, [flowDetail.dsl?.path]); - - const highlightStyle = useMemo(() => { - const idx = graphPath.findIndex((x) => x === source); - if (idx !== -1) { - // The set of elements following source - const slicedGraphPath = graphPath.slice(idx + 1); - if (slicedGraphPath.some((x) => x === target)) { - return { strokeWidth: 2, stroke: 'red' }; - } - } - return {}; - }, [source, target, graphPath]); - - return ( - <> - - -
- -
-
- - ); -} diff --git a/web/src/pages/agent/canvas/index.less b/web/src/pages/agent/canvas/index.less deleted file mode 100644 index d824d88..0000000 --- a/web/src/pages/agent/canvas/index.less +++ /dev/null @@ -1,10 +0,0 @@ -.canvasWrapper { - position: relative; - height: 100%; - :global(.react-flow__node-group) { - .commonNode(); - padding: 0; - border: 0; - background-color: transparent; - } -} diff --git a/web/src/pages/agent/canvas/index.tsx b/web/src/pages/agent/canvas/index.tsx deleted file mode 100644 index c7acb9d..0000000 --- a/web/src/pages/agent/canvas/index.tsx +++ /dev/null @@ -1,183 +0,0 @@ -import { - Background, - ConnectionMode, - NodeTypes, - ReactFlow, -} from '@xyflow/react'; -import '@xyflow/react/dist/style.css'; -// import ChatDrawer from '../chat/drawer'; -import FormSheet from '../form-sheet/next'; -import { - useHandleDrop, - useSelectCanvasData, - useValidateConnection, - useWatchNodeFormDataChange, -} from '../hooks'; -import { useBeforeDelete } from '../hooks/use-before-delete'; -import { useShowDrawer } from '../hooks/use-show-drawer'; -// import RunDrawer from '../run-drawer'; -import { ButtonEdge } from './edge'; -import styles from './index.less'; -import { RagNode } from './node'; -import { BeginNode } from './node/begin-node'; -import { CategorizeNode } from './node/categorize-node'; -import { EmailNode } from './node/email-node'; -import { GenerateNode } from './node/generate-node'; -import { InvokeNode } from './node/invoke-node'; -import { IterationNode, IterationStartNode } from './node/iteration-node'; -import { KeywordNode } from './node/keyword-node'; -import { LogicNode } from './node/logic-node'; -import { MessageNode } from './node/message-node'; -import NoteNode from './node/note-node'; -import { RelevantNode } from './node/relevant-node'; -import { RetrievalNode } from './node/retrieval-node'; -import { RewriteNode } from './node/rewrite-node'; -import { SwitchNode } from './node/switch-node'; -import { TemplateNode } from './node/template-node'; - -const nodeTypes: NodeTypes = { - ragNode: RagNode, - categorizeNode: CategorizeNode, - beginNode: BeginNode, - relevantNode: RelevantNode, - logicNode: LogicNode, - noteNode: NoteNode, - switchNode: SwitchNode, - generateNode: GenerateNode, - retrievalNode: RetrievalNode, - messageNode: MessageNode, - rewriteNode: RewriteNode, - keywordNode: KeywordNode, - invokeNode: InvokeNode, - templateNode: TemplateNode, - emailNode: EmailNode, - group: IterationNode, - iterationStartNode: IterationStartNode, -}; - -const edgeTypes = { - buttonEdge: ButtonEdge, -}; - -interface IProps { - drawerVisible: boolean; - hideDrawer(): void; -} - -function FlowCanvas({ drawerVisible, hideDrawer }: IProps) { - const { - nodes, - edges, - onConnect, - onEdgesChange, - onNodesChange, - onSelectionChange, - } = useSelectCanvasData(); - const isValidConnection = useValidateConnection(); - - const { onDrop, onDragOver, setReactFlowInstance } = useHandleDrop(); - - const { - onNodeClick, - onPaneClick, - clickedNode, - formDrawerVisible, - hideFormDrawer, - singleDebugDrawerVisible, - hideSingleDebugDrawer, - showSingleDebugDrawer, - chatVisible, - runVisible, - hideRunOrChatDrawer, - showChatModal, - } = useShowDrawer({ - drawerVisible, - hideDrawer, - }); - - const { handleBeforeDelete } = useBeforeDelete(); - - useWatchNodeFormDataChange(); - - return ( -
- - - - - - - - - {formDrawerVisible && ( - - )} - {/* {chatVisible && ( - - )} - - {runVisible && ( - - )} */} -
- ); -} - -export default FlowCanvas; diff --git a/web/src/pages/agent/canvas/node/begin-node.tsx b/web/src/pages/agent/canvas/node/begin-node.tsx deleted file mode 100644 index 83e3665..0000000 --- a/web/src/pages/agent/canvas/node/begin-node.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { useTheme } from '@/components/theme-provider'; -import { IBeginNode } from '@/interfaces/database/flow'; -import { Handle, NodeProps, Position } from '@xyflow/react'; -import { Flex } from 'antd'; -import classNames from 'classnames'; -import get from 'lodash/get'; -import { useTranslation } from 'react-i18next'; -import { - BeginQueryType, - BeginQueryTypeIconMap, - Operator, - operatorMap, -} from '../../constant'; -import { BeginQuery } from '../../interface'; -import OperatorIcon from '../../operator-icon'; -import { RightHandleStyle } from './handle-icon'; -import styles from './index.less'; - -// TODO: do not allow other nodes to connect to this node -export function BeginNode({ selected, data }: NodeProps) { - const { t } = useTranslation(); - const query: BeginQuery[] = get(data, 'form.query', []); - const { theme } = useTheme(); - return ( -
- - - - -
- {t(`flow.begin`)} -
-
- - {query.map((x, idx) => { - const Icon = BeginQueryTypeIconMap[x.type as BeginQueryType]; - return ( - - - - {x.name} - {x.optional ? 'Yes' : 'No'} - - ); - })} - -
- ); -} diff --git a/web/src/pages/agent/canvas/node/card.tsx b/web/src/pages/agent/canvas/node/card.tsx deleted file mode 100644 index 042ca45..0000000 --- a/web/src/pages/agent/canvas/node/card.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { Button } from '@/components/ui/button'; -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from '@/components/ui/card'; -import { Input } from '@/components/ui/input'; -import { Label } from '@/components/ui/label'; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '@/components/ui/select'; - -export function CardWithForm() { - return ( - - - Create project - Deploy your new project in one-click. - - -
-
-
- - -
-
- - -
-
-
-
- - - - -
- ); -} diff --git a/web/src/pages/agent/canvas/node/categorize-handle.tsx b/web/src/pages/agent/canvas/node/categorize-handle.tsx deleted file mode 100644 index ce1fc36..0000000 --- a/web/src/pages/agent/canvas/node/categorize-handle.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { Handle, Position } from '@xyflow/react'; - -import React from 'react'; -import styles from './index.less'; - -const DEFAULT_HANDLE_STYLE = { - width: 6, - height: 6, - bottom: -5, - fontSize: 8, -}; - -interface IProps extends React.PropsWithChildren { - top: number; - right: number; - id: string; - idx?: number; -} - -const CategorizeHandle = ({ top, right, id, children }: IProps) => { - return ( - - {children || id} - - ); -}; - -export default CategorizeHandle; diff --git a/web/src/pages/agent/canvas/node/categorize-node.tsx b/web/src/pages/agent/canvas/node/categorize-node.tsx deleted file mode 100644 index 18c3cdf..0000000 --- a/web/src/pages/agent/canvas/node/categorize-node.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import LLMLabel from '@/components/llm-select/llm-label'; -import { useTheme } from '@/components/theme-provider'; -import { ICategorizeNode } from '@/interfaces/database/flow'; -import { Handle, NodeProps, Position } from '@xyflow/react'; -import { Flex } from 'antd'; -import classNames from 'classnames'; -import { get } from 'lodash'; -import { RightHandleStyle } from './handle-icon'; -import { useBuildCategorizeHandlePositions } from './hooks'; -import styles from './index.less'; -import NodeHeader from './node-header'; - -export function CategorizeNode({ - id, - data, - selected, -}: NodeProps) { - const { positions } = useBuildCategorizeHandlePositions({ data, id }); - const { theme } = useTheme(); - return ( -
- - - - - -
- -
- {positions.map((position, idx) => { - return ( -
-
{position.text}
- -
- ); - })} -
-
- ); -} diff --git a/web/src/pages/agent/canvas/node/dropdown.tsx b/web/src/pages/agent/canvas/node/dropdown.tsx deleted file mode 100644 index dd5263a..0000000 --- a/web/src/pages/agent/canvas/node/dropdown.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import OperateDropdown from '@/components/operate-dropdown'; -import { CopyOutlined } from '@ant-design/icons'; -import { Flex, MenuProps } from 'antd'; -import { useCallback } from 'react'; -import { useTranslation } from 'react-i18next'; -import { Operator } from '../../constant'; -import { useDuplicateNode } from '../../hooks'; -import useGraphStore from '../../store'; - -interface IProps { - id: string; - iconFontColor?: string; - label: string; -} - -const NodeDropdown = ({ id, iconFontColor, label }: IProps) => { - const { t } = useTranslation(); - const deleteNodeById = useGraphStore((store) => store.deleteNodeById); - const deleteIterationNodeById = useGraphStore( - (store) => store.deleteIterationNodeById, - ); - - const deleteNode = useCallback(() => { - if (label === Operator.Iteration) { - deleteIterationNodeById(id); - } else { - deleteNodeById(id); - } - }, [label, deleteIterationNodeById, id, deleteNodeById]); - - const duplicateNode = useDuplicateNode(); - - const items: MenuProps['items'] = [ - { - key: '2', - onClick: () => duplicateNode(id, label), - label: ( - - {t('common.copy')} - - - ), - }, - ]; - - return ( - - ); -}; - -export default NodeDropdown; diff --git a/web/src/pages/agent/canvas/node/email-node.tsx b/web/src/pages/agent/canvas/node/email-node.tsx deleted file mode 100644 index ae4af84..0000000 --- a/web/src/pages/agent/canvas/node/email-node.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { IEmailNode } from '@/interfaces/database/flow'; -import { Handle, NodeProps, Position } from '@xyflow/react'; -import { Flex } from 'antd'; -import classNames from 'classnames'; -import { useState } from 'react'; -import { LeftHandleStyle, RightHandleStyle } from './handle-icon'; -import styles from './index.less'; -import NodeHeader from './node-header'; - -export function EmailNode({ - id, - data, - isConnectable = true, - selected, -}: NodeProps) { - const [showDetails, setShowDetails] = useState(false); - - return ( -
- - - - - -
setShowDetails(!showDetails)} - > -
- SMTP: - {data.form?.smtp_server} -
-
- Port: - {data.form?.smtp_port} -
-
- From: - {data.form?.email} -
-
{showDetails ? '▼' : '▶'}
-
- - {showDetails && ( -
-
Expected Input JSON:
-
-              {`{
-  "to_email": "...",
-  "cc_email": "...", 
-  "subject": "...",
-  "content": "..."
-}`}
-            
-
- )} -
-
- ); -} diff --git a/web/src/pages/agent/canvas/node/generate-node.tsx b/web/src/pages/agent/canvas/node/generate-node.tsx deleted file mode 100644 index 255eccd..0000000 --- a/web/src/pages/agent/canvas/node/generate-node.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import LLMLabel from '@/components/llm-select/llm-label'; -import { useTheme } from '@/components/theme-provider'; -import { IGenerateNode } from '@/interfaces/database/flow'; -import { Handle, NodeProps, Position } from '@xyflow/react'; -import classNames from 'classnames'; -import { get } from 'lodash'; -import { LeftHandleStyle, RightHandleStyle } from './handle-icon'; -import styles from './index.less'; -import NodeHeader from './node-header'; - -export function GenerateNode({ - id, - data, - isConnectable = true, - selected, -}: NodeProps) { - const { theme } = useTheme(); - return ( -
- - - - - -
- -
-
- ); -} diff --git a/web/src/pages/agent/canvas/node/handle-icon.tsx b/web/src/pages/agent/canvas/node/handle-icon.tsx deleted file mode 100644 index 36c7f36..0000000 --- a/web/src/pages/agent/canvas/node/handle-icon.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { PlusOutlined } from '@ant-design/icons'; -import { CSSProperties } from 'react'; - -export const HandleIcon = () => { - return ( - - ); -}; - -export const RightHandleStyle: CSSProperties = { - right: 0, -}; - -export const LeftHandleStyle: CSSProperties = { - left: 0, -}; - -export default HandleIcon; diff --git a/web/src/pages/agent/canvas/node/hooks.ts b/web/src/pages/agent/canvas/node/hooks.ts deleted file mode 100644 index fbea8f1..0000000 --- a/web/src/pages/agent/canvas/node/hooks.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { useUpdateNodeInternals } from '@xyflow/react'; -import get from 'lodash/get'; -import { useEffect, useMemo } from 'react'; -import { SwitchElseTo } from '../../constant'; - -import { - ICategorizeItemResult, - ISwitchCondition, - RAGFlowNodeType, -} from '@/interfaces/database/flow'; -import { generateSwitchHandleText } from '../../utils'; - -export const useBuildCategorizeHandlePositions = ({ - data, - id, -}: { - id: string; - data: RAGFlowNodeType['data']; -}) => { - const updateNodeInternals = useUpdateNodeInternals(); - - const categoryData: ICategorizeItemResult = useMemo(() => { - return get(data, `form.category_description`, {}); - }, [data]); - - const positions = useMemo(() => { - const list: Array<{ - text: string; - top: number; - idx: number; - }> = []; - - Object.keys(categoryData) - .sort((a, b) => categoryData[a].index - categoryData[b].index) - .forEach((x, idx) => { - list.push({ - text: x, - idx, - top: idx === 0 ? 98 + 20 : list[idx - 1].top + 8 + 26, - }); - }); - - return list; - }, [categoryData]); - - useEffect(() => { - updateNodeInternals(id); - }, [id, updateNodeInternals, categoryData]); - - return { positions }; -}; - -export const useBuildSwitchHandlePositions = ({ - data, - id, -}: { - id: string; - data: RAGFlowNodeType['data']; -}) => { - const updateNodeInternals = useUpdateNodeInternals(); - - const conditions: ISwitchCondition[] = useMemo(() => { - return get(data, 'form.conditions', []); - }, [data]); - - const positions = useMemo(() => { - const list: Array<{ - text: string; - top: number; - idx: number; - condition?: ISwitchCondition; - }> = []; - - [...conditions, ''].forEach((x, idx) => { - let top = idx === 0 ? 58 + 20 : list[idx - 1].top + 32; // case number (Case 1) height + flex gap - if (idx - 1 >= 0) { - const previousItems = conditions[idx - 1]?.items ?? []; - if (previousItems.length > 0) { - top += 12; // ConditionBlock padding - top += previousItems.length * 22; // condition variable height - top += (previousItems.length - 1) * 25; // operator height - } - } - - list.push({ - text: - idx < conditions.length - ? generateSwitchHandleText(idx) - : SwitchElseTo, - idx, - top, - condition: typeof x === 'string' ? undefined : x, - }); - }); - - return list; - }, [conditions]); - - useEffect(() => { - updateNodeInternals(id); - }, [id, updateNodeInternals, conditions]); - - return { positions }; -}; diff --git a/web/src/pages/agent/canvas/node/index.less b/web/src/pages/agent/canvas/node/index.less deleted file mode 100644 index 14d7e60..0000000 --- a/web/src/pages/agent/canvas/node/index.less +++ /dev/null @@ -1,285 +0,0 @@ -.dark { - background: rgb(63, 63, 63) !important; -} -.ragNode { - .commonNode(); - .nodeName { - font-size: 10px; - color: black; - } - label { - display: block; - color: #777; - font-size: 12px; - } - .description { - font-size: 10px; - } - - .categorizeAnchorPointText { - position: absolute; - top: -4px; - left: 8px; - white-space: nowrap; - } -} - -@lightBackgroundColor: rgba(150, 150, 150, 0.1); -@darkBackgroundColor: rgba(150, 150, 150, 0.2); - -.selectedNode { - border: 1.5px solid rgb(59, 118, 244); -} - -.selectedIterationNode { - border-bottom: 1.5px solid rgb(59, 118, 244); - border-left: 1.5px solid rgb(59, 118, 244); - border-right: 1.5px solid rgb(59, 118, 244); -} - -.iterationHeader { - .commonNodeShadow(); -} - -.selectedHeader { - border-top: 1.9px solid rgb(59, 118, 244); - border-left: 1.9px solid rgb(59, 118, 244); - border-right: 1.9px solid rgb(59, 118, 244); -} - -.handle { - display: inline-flex; - align-items: center; - justify-content: center; - width: 12px; - height: 12px; - background: rgb(59, 88, 253); - border: 1px solid white; - z-index: 1; - background-image: url('@/assets/svg/plus.svg'); - background-size: cover; - background-position: center; -} - -.jsonView { - word-wrap: break-word; - overflow: auto; - max-width: 300px; - max-height: 500px; -} - -.logicNode { - .commonNode(); - - .nodeName { - font-size: 10px; - color: black; - } - label { - display: block; - color: #777; - font-size: 12px; - } - - .description { - font-size: 10px; - } - - .categorizeAnchorPointText { - position: absolute; - top: -4px; - left: 8px; - white-space: nowrap; - } - .relevantSourceLabel { - font-size: 10px; - } -} - -.noteNode { - .commonNode(); - min-width: 140px; - width: auto; - height: 100%; - padding: 8px; - border-radius: 10px; - min-height: 128px; - .noteTitle { - background-color: #edfcff; - font-size: 12px; - padding: 6px 6px 4px; - border-top-left-radius: 10px; - border-top-right-radius: 10px; - } - .noteTitleDark { - background-color: #edfcff; - font-size: 12px; - padding: 6px 6px 4px; - border-top-left-radius: 10px; - border-top-right-radius: 10px; - } - .noteForm { - margin-top: 4px; - height: calc(100% - 50px); - } - .noteName { - padding: 0px 4px; - } - .noteTextarea { - resize: none; - border: 0; - border-radius: 0; - height: 100%; - &:focus { - border: none; - box-shadow: none; - } - } -} - -.iterationNode { - .commonNodeShadow(); - border-bottom-left-radius: 10px; - border-bottom-right-radius: 10px; -} - -.nodeText { - padding-inline: 0.4em; - padding-block: 0.2em 0.1em; - background: @lightBackgroundColor; - border-radius: 3px; - min-height: 22px; - .textEllipsis(); -} - -.nodeHeader { - padding-bottom: 12px; -} - -.zeroDivider { - margin: 0 !important; -} - -.conditionBlock { - border-radius: 4px; - padding: 6px; - background: @lightBackgroundColor; -} - -.conditionLine { - border-radius: 4px; - padding: 0 4px; - background: @darkBackgroundColor; - .textEllipsis(); -} - -.conditionKey { - flex: 1; -} - -.conditionOperator { - padding: 0 2px; - text-align: center; -} - -.relevantLabel { - text-align: right; -} - -.knowledgeNodeName { - .textEllipsis(); -} - -.messageNodeContainer { - overflow-y: auto; - max-height: 300px; -} - -.generateParameters { - padding-top: 8px; - label { - flex: 2; - .textEllipsis(); - } - .parameterValue { - flex: 3; - .conditionLine; - } -} - -.emailNodeContainer { - padding: 8px; - font-size: 12px; - - .emailConfig { - background: rgba(0, 0, 0, 0.02); - border-radius: 4px; - padding: 8px; - position: relative; - cursor: pointer; - - &:hover { - background: rgba(0, 0, 0, 0.04); - } - - .configItem { - display: flex; - align-items: center; - margin-bottom: 4px; - - &:last-child { - margin-bottom: 0; - } - - .configLabel { - color: #666; - width: 45px; - flex-shrink: 0; - } - - .configValue { - color: #333; - word-break: break-all; - } - } - - .expandIcon { - position: absolute; - right: 8px; - top: 50%; - transform: translateY(-50%); - color: #666; - font-size: 12px; - } - } - - .jsonExample { - background: #f5f5f5; - border-radius: 4px; - padding: 8px; - margin-top: 4px; - animation: slideDown 0.2s ease-out; - - .jsonTitle { - color: #666; - margin-bottom: 4px; - } - - .jsonContent { - margin: 0; - color: #333; - font-family: monospace; - } - } -} - -@keyframes slideDown { - from { - opacity: 0; - transform: translateY(-10px); - } - to { - opacity: 1; - transform: translateY(0); - } -} diff --git a/web/src/pages/agent/canvas/node/index.tsx b/web/src/pages/agent/canvas/node/index.tsx deleted file mode 100644 index 32191f5..0000000 --- a/web/src/pages/agent/canvas/node/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { useTheme } from '@/components/theme-provider'; -import { IRagNode } from '@/interfaces/database/flow'; -import { Handle, NodeProps, Position } from '@xyflow/react'; -import classNames from 'classnames'; -import { LeftHandleStyle, RightHandleStyle } from './handle-icon'; -import styles from './index.less'; -import NodeHeader from './node-header'; - -export function RagNode({ - id, - data, - isConnectable = true, - selected, -}: NodeProps) { - const { theme } = useTheme(); - return ( -
- - - -
- ); -} diff --git a/web/src/pages/agent/canvas/node/invoke-node.tsx b/web/src/pages/agent/canvas/node/invoke-node.tsx deleted file mode 100644 index 42d109f..0000000 --- a/web/src/pages/agent/canvas/node/invoke-node.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { useTheme } from '@/components/theme-provider'; -import { IInvokeNode } from '@/interfaces/database/flow'; -import { Handle, NodeProps, Position } from '@xyflow/react'; -import { Flex } from 'antd'; -import classNames from 'classnames'; -import { get } from 'lodash'; -import { useTranslation } from 'react-i18next'; -import { LeftHandleStyle, RightHandleStyle } from './handle-icon'; -import styles from './index.less'; -import NodeHeader from './node-header'; - -export function InvokeNode({ - id, - data, - isConnectable = true, - selected, -}: NodeProps) { - const { t } = useTranslation(); - const { theme } = useTheme(); - const url = get(data, 'form.url'); - return ( -
- - - - -
{t('flow.url')}
-
{url}
-
-
- ); -} diff --git a/web/src/pages/agent/canvas/node/iteration-node.tsx b/web/src/pages/agent/canvas/node/iteration-node.tsx deleted file mode 100644 index c15b4fc..0000000 --- a/web/src/pages/agent/canvas/node/iteration-node.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import { useTheme } from '@/components/theme-provider'; -import { - IIterationNode, - IIterationStartNode, -} from '@/interfaces/database/flow'; -import { cn } from '@/lib/utils'; -import { Handle, NodeProps, NodeResizeControl, Position } from '@xyflow/react'; -import { ListRestart } from 'lucide-react'; -import { LeftHandleStyle, RightHandleStyle } from './handle-icon'; -import styles from './index.less'; -import NodeHeader from './node-header'; - -function ResizeIcon() { - return ( - - - - - - - - ); -} - -const controlStyle = { - background: 'transparent', - border: 'none', - cursor: 'nwse-resize', -}; - -export function IterationNode({ - id, - data, - isConnectable = true, - selected, -}: NodeProps) { - const { theme } = useTheme(); - - return ( -
- - - - - - -
- ); -} - -export function IterationStartNode({ - isConnectable = true, - selected, -}: NodeProps) { - const { theme } = useTheme(); - - return ( -
- -
- -
-
- ); -} diff --git a/web/src/pages/agent/canvas/node/keyword-node.tsx b/web/src/pages/agent/canvas/node/keyword-node.tsx deleted file mode 100644 index f607d43..0000000 --- a/web/src/pages/agent/canvas/node/keyword-node.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import LLMLabel from '@/components/llm-select/llm-label'; -import { useTheme } from '@/components/theme-provider'; -import { IKeywordNode } from '@/interfaces/database/flow'; -import { Handle, NodeProps, Position } from '@xyflow/react'; -import classNames from 'classnames'; -import { get } from 'lodash'; -import { LeftHandleStyle, RightHandleStyle } from './handle-icon'; -import styles from './index.less'; -import NodeHeader from './node-header'; - -export function KeywordNode({ - id, - data, - isConnectable = true, - selected, -}: NodeProps) { - const { theme } = useTheme(); - return ( -
- - - - - -
- -
-
- ); -} diff --git a/web/src/pages/agent/canvas/node/logic-node.tsx b/web/src/pages/agent/canvas/node/logic-node.tsx deleted file mode 100644 index 2821561..0000000 --- a/web/src/pages/agent/canvas/node/logic-node.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { useTheme } from '@/components/theme-provider'; -import { ILogicNode } from '@/interfaces/database/flow'; -import { Handle, NodeProps, Position } from '@xyflow/react'; -import classNames from 'classnames'; -import { LeftHandleStyle, RightHandleStyle } from './handle-icon'; -import styles from './index.less'; -import NodeHeader from './node-header'; - -export function LogicNode({ - id, - data, - isConnectable = true, - selected, -}: NodeProps) { - const { theme } = useTheme(); - return ( -
- - - -
- ); -} diff --git a/web/src/pages/agent/canvas/node/message-node.tsx b/web/src/pages/agent/canvas/node/message-node.tsx deleted file mode 100644 index 5b3a173..0000000 --- a/web/src/pages/agent/canvas/node/message-node.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { useTheme } from '@/components/theme-provider'; -import { IMessageNode } from '@/interfaces/database/flow'; -import { Handle, NodeProps, Position } from '@xyflow/react'; -import { Flex } from 'antd'; -import classNames from 'classnames'; -import { get } from 'lodash'; -import { LeftHandleStyle, RightHandleStyle } from './handle-icon'; -import styles from './index.less'; -import NodeHeader from './node-header'; - -export function MessageNode({ - id, - data, - isConnectable = true, - selected, -}: NodeProps) { - const messages: string[] = get(data, 'form.messages', []); - const { theme } = useTheme(); - return ( -
- - - 0, - })} - > - - - {messages.map((message, idx) => { - return ( -
- {message} -
- ); - })} -
-
- ); -} diff --git a/web/src/pages/agent/canvas/node/node-header.tsx b/web/src/pages/agent/canvas/node/node-header.tsx deleted file mode 100644 index 99a37dc..0000000 --- a/web/src/pages/agent/canvas/node/node-header.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { useTranslate } from '@/hooks/common-hooks'; -import { Flex } from 'antd'; -import { Play } from 'lucide-react'; -import { Operator, operatorMap } from '../../constant'; -import OperatorIcon from '../../operator-icon'; -import { needsSingleStepDebugging } from '../../utils'; -import NodeDropdown from './dropdown'; -import { NextNodePopover } from './popover'; - -import { RunTooltip } from '../../flow-tooltip'; -interface IProps { - id: string; - label: string; - name: string; - gap?: number; - className?: string; - wrapperClassName?: string; -} - -const ExcludedRunStateOperators = [Operator.Answer]; - -export function RunStatus({ id, name, label }: IProps) { - const { t } = useTranslate('flow'); - return ( -
- {needsSingleStepDebugging(label) && ( - - - // data-play is used to trigger single step debugging - )} - - - {t('operationResults')} - - -
- ); -} - -const NodeHeader = ({ - label, - id, - name, - gap = 4, - className, - wrapperClassName, -}: IProps) => { - return ( -
- {!ExcludedRunStateOperators.includes(label as Operator) && ( - - )} - - - - {name} - - - -
- ); -}; - -export default NodeHeader; diff --git a/web/src/pages/agent/canvas/node/note-node.tsx b/web/src/pages/agent/canvas/node/note-node.tsx deleted file mode 100644 index 1917a81..0000000 --- a/web/src/pages/agent/canvas/node/note-node.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import { NodeProps, NodeResizeControl } from '@xyflow/react'; -import { Flex, Form, Input } from 'antd'; -import classNames from 'classnames'; -import NodeDropdown from './dropdown'; - -import SvgIcon from '@/components/svg-icon'; -import { useTheme } from '@/components/theme-provider'; -import { INoteNode } from '@/interfaces/database/flow'; -import { memo, useEffect } from 'react'; -import { useTranslation } from 'react-i18next'; -import { - useHandleFormValuesChange, - useHandleNodeNameChange, -} from '../../hooks'; -import styles from './index.less'; - -const { TextArea } = Input; - -const controlStyle = { - background: 'transparent', - border: 'none', -}; - -function NoteNode({ data, id }: NodeProps) { - const { t } = useTranslation(); - const [form] = Form.useForm(); - const { theme } = useTheme(); - - const { name, handleNameBlur, handleNameChange } = useHandleNodeNameChange({ - id, - data, - }); - const { handleValuesChange } = useHandleFormValuesChange(id); - - useEffect(() => { - form.setFieldsValue(data?.form); - }, [form, data?.form]); - - return ( - <> - - - -
- - - - - -
- -