gitextract_n8yk_ve4/ ├── .dockerignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── bug-report_en.yml │ │ ├── feature-request.yml │ │ ├── feature-request_en.yml │ │ ├── submit-plugin.yml │ │ └── submit-plugin_en.yml │ ├── dependabot.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── build-dev-image.yaml │ ├── build-docker-image.yml │ ├── build-release-artifacts.yaml │ ├── lint.yml │ ├── publish-to-pypi.yml │ ├── run-tests.yml │ └── test-dev-image.yaml ├── .gitignore ├── .mcp.json ├── .pre-commit-config.yaml ├── AGENTS.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── README_CN.md ├── README_ES.md ├── README_FR.md ├── README_JP.md ├── README_KO.md ├── README_RU.md ├── README_TW.md ├── README_VI.md ├── codecov.yml ├── docker/ │ ├── README_K8S.md │ ├── deploy-k8s-test.sh │ ├── docker-compose.yaml │ └── kubernetes.yaml ├── docs/ │ ├── API_KEY_AUTH.md │ ├── MIGRATION_SUMMARY.md │ ├── PYPI_INSTALLATION.md │ ├── SEEKDB_INTEGRATION.md │ ├── TESTING_SUMMARY.md │ ├── WEBSOCKET_README.md │ └── service-api-openapi.json ├── main.py ├── pyproject.toml ├── pytest.ini ├── res/ │ ├── announcement.json │ ├── announcement_saved.json │ ├── instance_id.json │ └── scripts/ │ └── publish_announcement.py ├── run_tests.sh ├── src/ │ └── langbot/ │ ├── __init__.py │ ├── __main__.py │ ├── libs/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── coze_server_api/ │ │ │ ├── __init__.py │ │ │ └── client.py │ │ ├── dify_service_api/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ └── v1/ │ │ │ ├── __init__.py │ │ │ ├── client.py │ │ │ ├── client_test.py │ │ │ └── errors.py │ │ ├── dingtalk_api/ │ │ │ ├── EchoHandler.py │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── dingtalkevent.py │ │ ├── official_account_api/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── oaevent.py │ │ ├── qq_official_api/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── qqofficialevent.py │ │ ├── slack_api/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── slackevent.py │ │ ├── wechatpad_api/ │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── api/ │ │ │ │ ├── __init__.py │ │ │ │ ├── chatroom.py │ │ │ │ ├── downloadpai.py │ │ │ │ ├── friend.py │ │ │ │ ├── login.py │ │ │ │ ├── message.py │ │ │ │ └── user.py │ │ │ ├── client.py │ │ │ └── util/ │ │ │ ├── __init__.py │ │ │ ├── http_util.py │ │ │ └── terminal_printer.py │ │ ├── wecom_ai_bot_api/ │ │ │ ├── WXBizMsgCrypt3.py │ │ │ ├── api.py │ │ │ ├── ierror.py │ │ │ ├── wecombotevent.py │ │ │ └── ws_client.py │ │ ├── wecom_api/ │ │ │ ├── WXBizMsgCrypt3.py │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── ierror.py │ │ │ └── wecomevent.py │ │ └── wecom_customer_service_api/ │ │ ├── __init__.py │ │ ├── api.py │ │ └── wecomcsevent.py │ ├── pkg/ │ │ ├── __init__.py │ │ ├── api/ │ │ │ ├── __init__.py │ │ │ └── http/ │ │ │ ├── __init__.py │ │ │ ├── controller/ │ │ │ │ ├── __init__.py │ │ │ │ ├── group.py │ │ │ │ ├── groups/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── apikeys.py │ │ │ │ │ ├── files.py │ │ │ │ │ ├── knowledge/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── base.py │ │ │ │ │ │ ├── engines.py │ │ │ │ │ │ ├── migration.py │ │ │ │ │ │ └── parsers.py │ │ │ │ │ ├── logs.py │ │ │ │ │ ├── monitoring.py │ │ │ │ │ ├── pipelines/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── pipelines.py │ │ │ │ │ │ └── websocket_chat.py │ │ │ │ │ ├── platform/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── adapters.py │ │ │ │ │ │ └── bots.py │ │ │ │ │ ├── plugins.py │ │ │ │ │ ├── provider/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── models.py │ │ │ │ │ │ ├── providers.py │ │ │ │ │ │ └── requesters.py │ │ │ │ │ ├── resources/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── mcp.py │ │ │ │ │ ├── stats.py │ │ │ │ │ ├── survey.py │ │ │ │ │ ├── system.py │ │ │ │ │ ├── user.py │ │ │ │ │ ├── webhook_mgmt.py │ │ │ │ │ └── webhooks.py │ │ │ │ └── main.py │ │ │ └── service/ │ │ │ ├── __init__.py │ │ │ ├── apikey.py │ │ │ ├── bot.py │ │ │ ├── knowledge.py │ │ │ ├── mcp.py │ │ │ ├── model.py │ │ │ ├── monitoring.py │ │ │ ├── pipeline.py │ │ │ ├── provider.py │ │ │ ├── space.py │ │ │ ├── user.py │ │ │ └── webhook.py │ │ ├── command/ │ │ │ ├── __init__.py │ │ │ ├── cmdmgr.py │ │ │ ├── operator.py │ │ │ └── operators/ │ │ │ ├── __init__.py │ │ │ ├── delc.py │ │ │ ├── last.py │ │ │ ├── list.py │ │ │ ├── next.py │ │ │ ├── prompt.py │ │ │ └── resend.py │ │ ├── config/ │ │ │ ├── __init__.py │ │ │ ├── impls/ │ │ │ │ ├── __init__.py │ │ │ │ ├── json.py │ │ │ │ ├── pymodule.py │ │ │ │ └── yaml.py │ │ │ ├── manager.py │ │ │ └── model.py │ │ ├── core/ │ │ │ ├── __init__.py │ │ │ ├── app.py │ │ │ ├── boot.py │ │ │ ├── bootutils/ │ │ │ │ ├── __init__.py │ │ │ │ ├── config.py │ │ │ │ ├── deps.py │ │ │ │ ├── files.py │ │ │ │ └── log.py │ │ │ ├── entities.py │ │ │ ├── migration.py │ │ │ ├── migrations/ │ │ │ │ ├── __init__.py │ │ │ │ ├── m001_sensitive_word_migration.py │ │ │ │ ├── m002_openai_config_migration.py │ │ │ │ ├── m003_anthropic_requester_cfg_completion.py │ │ │ │ ├── m004_moonshot_cfg_completion.py │ │ │ │ ├── m005_deepseek_cfg_completion.py │ │ │ │ ├── m006_vision_config.py │ │ │ │ ├── m007_qcg_center_url.py │ │ │ │ ├── m008_ad_fixwin_config_migrate.py │ │ │ │ ├── m009_msg_truncator_cfg.py │ │ │ │ ├── m010_ollama_requester_config.py │ │ │ │ ├── m011_command_prefix_config.py │ │ │ │ ├── m012_runner_config.py │ │ │ │ ├── m013_http_api_config.py │ │ │ │ ├── m014_force_delay_config.py │ │ │ │ ├── m015_gitee_ai_config.py │ │ │ │ ├── m016_dify_service_api.py │ │ │ │ ├── m017_dify_api_timeout_params.py │ │ │ │ ├── m018_xai_config.py │ │ │ │ ├── m019_zhipuai_config.py │ │ │ │ ├── m020_wecom_config.py │ │ │ │ ├── m021_lark_config.py │ │ │ │ ├── m022_lmstudio_config.py │ │ │ │ ├── m023_siliconflow_config.py │ │ │ │ ├── m024_discord_config.py │ │ │ │ ├── m025_gewechat_config.py │ │ │ │ ├── m026_qqofficial_config.py │ │ │ │ ├── m027_wx_official_account_config.py │ │ │ │ ├── m028_aliyun_requester_config.py │ │ │ │ ├── m029_dashscope_app_api_config.py │ │ │ │ ├── m030_lark_config_cmpl.py │ │ │ │ ├── m031_dingtalk_config.py │ │ │ │ ├── m032_volcark_config.py │ │ │ │ ├── m033_dify_thinking_config.py │ │ │ │ ├── m034_gewechat_file_url_config.py │ │ │ │ ├── m035_wxoa_mode.py │ │ │ │ ├── m036_wxoa_loading_message.py │ │ │ │ ├── m037_mcp_config.py │ │ │ │ ├── m038_tg_dingtalk_markdown.py │ │ │ │ ├── m039_modelscope_cfg_completion.py │ │ │ │ ├── m040_ppio_config.py │ │ │ │ └── m041_dingtalk_card_autolayout_config.py │ │ │ ├── note.py │ │ │ ├── notes/ │ │ │ │ ├── __init__.py │ │ │ │ ├── n001_classic_msgs.py │ │ │ │ ├── n002_selection_mode_on_windows.py │ │ │ │ └── n003_print_version.py │ │ │ ├── stage.py │ │ │ ├── stages/ │ │ │ │ ├── __init__.py │ │ │ │ ├── build_app.py │ │ │ │ ├── genkeys.py │ │ │ │ ├── load_config.py │ │ │ │ ├── migrate.py │ │ │ │ ├── setup_logger.py │ │ │ │ └── show_notes.py │ │ │ └── taskmgr.py │ │ ├── discover/ │ │ │ ├── __init__.py │ │ │ └── engine.py │ │ ├── entity/ │ │ │ ├── __init__.py │ │ │ ├── dto/ │ │ │ │ ├── __init__.py │ │ │ │ └── space_model.py │ │ │ ├── errors/ │ │ │ │ ├── __init__.py │ │ │ │ ├── account.py │ │ │ │ ├── platform.py │ │ │ │ └── provider.py │ │ │ └── persistence/ │ │ │ ├── __init__.py │ │ │ ├── apikey.py │ │ │ ├── base.py │ │ │ ├── bot.py │ │ │ ├── bstorage.py │ │ │ ├── mcp.py │ │ │ ├── metadata.py │ │ │ ├── model.py │ │ │ ├── monitoring.py │ │ │ ├── pipeline.py │ │ │ ├── plugin.py │ │ │ ├── rag.py │ │ │ ├── user.py │ │ │ ├── vector.py │ │ │ └── webhook.py │ │ ├── persistence/ │ │ │ ├── __init__.py │ │ │ ├── database.py │ │ │ ├── databases/ │ │ │ │ ├── __init__.py │ │ │ │ ├── postgresql.py │ │ │ │ └── sqlite.py │ │ │ ├── mgr.py │ │ │ ├── migration.py │ │ │ └── migrations/ │ │ │ ├── __init__.py │ │ │ ├── dbm001_migrate_v3_config.py │ │ │ ├── dbm002_combine_quote_msg_config.py │ │ │ ├── dbm003_n8n_config.py │ │ │ ├── dbm004_rag_kb_uuid.py │ │ │ ├── dbm005_pipeline_remove_cot_config.py │ │ │ ├── dbm006_langflow_api_config.py │ │ │ ├── dbm007_plugin_install_source.py │ │ │ ├── dbm008_plugin_config.py │ │ │ ├── dbm009_pipeline_extension_preferences.py │ │ │ ├── dbm010_pipeline_multi_knowledge_base.py │ │ │ ├── dbm011_dify_base_prompt_config.py │ │ │ ├── dbm012_pipeline_extensions_enable_all.py │ │ │ ├── dbm013_knowledge_base_updated_at.py │ │ │ ├── dbm014_space_account_support.py │ │ │ ├── dbm015_model_source_tracking.py │ │ │ ├── dbm016_model_provider_refactor.py │ │ │ ├── dbm017_move_cloud_service_url.py │ │ │ ├── dbm018_add_emoji_support.py │ │ │ ├── dbm019_monitoring_message_role.py │ │ │ ├── dbm020_knowledge_engine_plugin_architecture.py │ │ │ ├── dbm021_merge_exception_handling.py │ │ │ ├── dbm022_monitoring_user_name.py │ │ │ ├── dbm023_model_fallback_config.py │ │ │ └── dbm024_wecombot_websocket_mode.py │ │ ├── pipeline/ │ │ │ ├── __init__.py │ │ │ ├── aggregator.py │ │ │ ├── bansess/ │ │ │ │ ├── __init__.py │ │ │ │ └── bansess.py │ │ │ ├── cntfilter/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cntfilter.py │ │ │ │ ├── entities.py │ │ │ │ ├── filter.py │ │ │ │ └── filters/ │ │ │ │ ├── __init__.py │ │ │ │ ├── baiduexamine.py │ │ │ │ ├── banwords.py │ │ │ │ └── cntignore.py │ │ │ ├── config_coercion.py │ │ │ ├── controller.py │ │ │ ├── entities.py │ │ │ ├── longtext/ │ │ │ │ ├── __init__.py │ │ │ │ ├── longtext.py │ │ │ │ ├── strategies/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── forward.py │ │ │ │ │ └── image.py │ │ │ │ └── strategy.py │ │ │ ├── monitoring_helper.py │ │ │ ├── msgtrun/ │ │ │ │ ├── __init__.py │ │ │ │ ├── msgtrun.py │ │ │ │ ├── truncator.py │ │ │ │ └── truncators/ │ │ │ │ ├── __init__.py │ │ │ │ └── round.py │ │ │ ├── pipelinemgr.py │ │ │ ├── pool.py │ │ │ ├── preproc/ │ │ │ │ ├── __init__.py │ │ │ │ └── preproc.py │ │ │ ├── process/ │ │ │ │ ├── __init__.py │ │ │ │ ├── handler.py │ │ │ │ ├── handlers/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── chat.py │ │ │ │ │ └── command.py │ │ │ │ └── process.py │ │ │ ├── ratelimit/ │ │ │ │ ├── __init__.py │ │ │ │ ├── algo.py │ │ │ │ ├── algos/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── fixedwin.py │ │ │ │ └── ratelimit.py │ │ │ ├── respback/ │ │ │ │ ├── __init__.py │ │ │ │ └── respback.py │ │ │ ├── resprule/ │ │ │ │ ├── __init__.py │ │ │ │ ├── entities.py │ │ │ │ ├── resprule.py │ │ │ │ ├── rule.py │ │ │ │ └── rules/ │ │ │ │ ├── __init__.py │ │ │ │ ├── atbot.py │ │ │ │ ├── prefix.py │ │ │ │ ├── random.py │ │ │ │ └── regexp.py │ │ │ ├── stage.py │ │ │ └── wrapper/ │ │ │ ├── __init__.py │ │ │ └── wrapper.py │ │ ├── platform/ │ │ │ ├── __init__.py │ │ │ ├── botmgr.py │ │ │ ├── logger.py │ │ │ ├── sources/ │ │ │ │ ├── __init__.py │ │ │ │ ├── aiocqhttp.py │ │ │ │ ├── aiocqhttp.yaml │ │ │ │ ├── dingtalk.py │ │ │ │ ├── dingtalk.yaml │ │ │ │ ├── discord.py │ │ │ │ ├── discord.yaml │ │ │ │ ├── kook.py │ │ │ │ ├── kook.yaml │ │ │ │ ├── lark.py │ │ │ │ ├── lark.yaml │ │ │ │ ├── legacy/ │ │ │ │ │ ├── gewechat.py │ │ │ │ │ ├── gewechat.yaml │ │ │ │ │ ├── nakuru.py │ │ │ │ │ ├── nakuru.yaml │ │ │ │ │ ├── qqbotpy.py │ │ │ │ │ └── qqbotpy.yaml │ │ │ │ ├── line.py │ │ │ │ ├── line.yaml │ │ │ │ ├── officialaccount.py │ │ │ │ ├── officialaccount.yaml │ │ │ │ ├── qqofficial.py │ │ │ │ ├── qqofficial.yaml │ │ │ │ ├── satori.py │ │ │ │ ├── satori.yaml │ │ │ │ ├── slack.py │ │ │ │ ├── slack.yaml │ │ │ │ ├── telegram.py │ │ │ │ ├── telegram.yaml │ │ │ │ ├── websocket.yaml │ │ │ │ ├── websocket_adapter.py │ │ │ │ ├── websocket_manager.py │ │ │ │ ├── wechatpad.py │ │ │ │ ├── wechatpad.yaml │ │ │ │ ├── wecom.py │ │ │ │ ├── wecom.yaml │ │ │ │ ├── wecombot.py │ │ │ │ ├── wecombot.yaml │ │ │ │ ├── wecomcs.py │ │ │ │ └── wecomcs.yaml │ │ │ └── webhook_pusher.py │ │ ├── plugin/ │ │ │ ├── __init__.py │ │ │ ├── connector.py │ │ │ └── handler.py │ │ ├── provider/ │ │ │ ├── __init__.py │ │ │ ├── modelmgr/ │ │ │ │ ├── __init__.py │ │ │ │ ├── entities.py │ │ │ │ ├── errors.py │ │ │ │ ├── modelmgr.py │ │ │ │ ├── requester.py │ │ │ │ ├── requester.yaml │ │ │ │ ├── requesters/ │ │ │ │ │ ├── 302aichatcmpl.py │ │ │ │ │ ├── 302aichatcmpl.yaml │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── anthropicmsgs.py │ │ │ │ │ ├── anthropicmsgs.yaml │ │ │ │ │ ├── bailianchatcmpl.py │ │ │ │ │ ├── bailianchatcmpl.yaml │ │ │ │ │ ├── chatcmpl.py │ │ │ │ │ ├── chatcmpl.yaml │ │ │ │ │ ├── compsharechatcmpl.py │ │ │ │ │ ├── compsharechatcmpl.yaml │ │ │ │ │ ├── deepseekchatcmpl.py │ │ │ │ │ ├── deepseekchatcmpl.yaml │ │ │ │ │ ├── geminichatcmpl.py │ │ │ │ │ ├── geminichatcmpl.yaml │ │ │ │ │ ├── giteeaichatcmpl.py │ │ │ │ │ ├── giteeaichatcmpl.yaml │ │ │ │ │ ├── jiekouaichatcmpl.py │ │ │ │ │ ├── jiekouaichatcmpl.yaml │ │ │ │ │ ├── lmstudiochatcmpl.py │ │ │ │ │ ├── lmstudiochatcmpl.yaml │ │ │ │ │ ├── modelscopechatcmpl.py │ │ │ │ │ ├── modelscopechatcmpl.yaml │ │ │ │ │ ├── moonshotchatcmpl.py │ │ │ │ │ ├── moonshotchatcmpl.yaml │ │ │ │ │ ├── newapichatcmpl.py │ │ │ │ │ ├── newapichatcmpl.yaml │ │ │ │ │ ├── ollamachat.py │ │ │ │ │ ├── ollamachat.yaml │ │ │ │ │ ├── openrouterchatcmpl.py │ │ │ │ │ ├── openrouterchatcmpl.yaml │ │ │ │ │ ├── ppiochatcmpl.py │ │ │ │ │ ├── ppiochatcmpl.yaml │ │ │ │ │ ├── qhaigcchatcmpl.py │ │ │ │ │ ├── qhaigcchatcmpl.yaml │ │ │ │ │ ├── seekdbembed.py │ │ │ │ │ ├── seekdbembed.yaml │ │ │ │ │ ├── shengsuanyun.py │ │ │ │ │ ├── shengsuanyun.yaml │ │ │ │ │ ├── siliconflowchatcmpl.py │ │ │ │ │ ├── siliconflowchatcmpl.yaml │ │ │ │ │ ├── spacechatcmpl.py │ │ │ │ │ ├── spacechatcmpl.yaml │ │ │ │ │ ├── tokenpony.yaml │ │ │ │ │ ├── tokenponychatcmpl.py │ │ │ │ │ ├── volcarkchatcmpl.py │ │ │ │ │ ├── volcarkchatcmpl.yaml │ │ │ │ │ ├── xaichatcmpl.py │ │ │ │ │ ├── xaichatcmpl.yaml │ │ │ │ │ ├── zhipuaichatcmpl.py │ │ │ │ │ └── zhipuaichatcmpl.yaml │ │ │ │ └── token.py │ │ │ ├── runner.py │ │ │ ├── runners/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cozeapi.py │ │ │ │ ├── dashscopeapi.py │ │ │ │ ├── difysvapi.py │ │ │ │ ├── langflowapi.py │ │ │ │ ├── localagent.py │ │ │ │ ├── n8nsvapi.py │ │ │ │ └── tboxapi.py │ │ │ ├── session/ │ │ │ │ ├── __init__.py │ │ │ │ └── sessionmgr.py │ │ │ └── tools/ │ │ │ ├── __init__.py │ │ │ ├── loader.py │ │ │ ├── loaders/ │ │ │ │ ├── __init__.py │ │ │ │ ├── mcp.py │ │ │ │ └── plugin.py │ │ │ └── toolmgr.py │ │ ├── rag/ │ │ │ ├── knowledge/ │ │ │ │ ├── base.py │ │ │ │ └── kbmgr.py │ │ │ └── service/ │ │ │ ├── __init__.py │ │ │ └── runtime.py │ │ ├── storage/ │ │ │ ├── __init__.py │ │ │ ├── mgr.py │ │ │ ├── provider.py │ │ │ └── providers/ │ │ │ ├── __init__.py │ │ │ ├── localstorage.py │ │ │ └── s3storage.py │ │ ├── survey/ │ │ │ ├── __init__.py │ │ │ └── manager.py │ │ ├── telemetry/ │ │ │ ├── __init__.py │ │ │ └── telemetry.py │ │ ├── utils/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── funcschema.py │ │ │ ├── httpclient.py │ │ │ ├── image.py │ │ │ ├── importutil.py │ │ │ ├── logcache.py │ │ │ ├── paths.py │ │ │ ├── pkgmgr.py │ │ │ ├── platform.py │ │ │ ├── proxy.py │ │ │ ├── runner.py │ │ │ └── version.py │ │ └── vector/ │ │ ├── __init__.py │ │ ├── filter_utils.py │ │ ├── mgr.py │ │ ├── vdb.py │ │ └── vdbs/ │ │ ├── __init__.py │ │ ├── chroma.py │ │ ├── milvus.py │ │ ├── pgvector_db.py │ │ ├── qdrant.py │ │ └── seekdb.py │ └── templates/ │ ├── __init__.py │ ├── components.yaml │ ├── config.yaml │ ├── default-pipeline-config.json │ ├── legacy/ │ │ ├── command.json │ │ ├── pipeline.json │ │ ├── platform.json │ │ ├── provider.json │ │ └── system.json │ └── metadata/ │ ├── pipeline/ │ │ ├── ai.yaml │ │ ├── output.yaml │ │ ├── safety.yaml │ │ └── trigger.yaml │ └── sensitive-words.json ├── tests/ │ ├── README.md │ ├── __init__.py │ └── unit_tests/ │ ├── __init__.py │ ├── config/ │ │ ├── __init__.py │ │ ├── test_env_override.py │ │ └── test_webhook_display_prefix.py │ ├── pipeline/ │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── test_bansess.py │ │ ├── test_config_coercion.py │ │ ├── test_pipelinemgr.py │ │ ├── test_ratelimit.py │ │ ├── test_resprule.py │ │ └── test_simple.py │ ├── plugin/ │ │ ├── __init__.py │ │ ├── test_plugin_component_filtering.py │ │ └── test_plugin_list_sorting.py │ └── storage/ │ ├── __init__.py │ └── test_storage_provider_selection.py └── web/ ├── .env.example ├── .gitignore ├── .lintstagedrc.json ├── .prettierrc.mjs ├── README.md ├── components.json ├── eslint.config.mjs ├── next ├── next.config.ts ├── package.json ├── postcss.config.mjs ├── src/ │ ├── app/ │ │ ├── auth/ │ │ │ └── space/ │ │ │ └── callback/ │ │ │ └── page.tsx │ │ ├── global.css │ │ ├── home/ │ │ │ ├── bots/ │ │ │ │ ├── BotDetailDialog.tsx │ │ │ │ ├── botConfig.module.css │ │ │ │ ├── components/ │ │ │ │ │ ├── bot-card/ │ │ │ │ │ │ ├── BotCard.tsx │ │ │ │ │ │ ├── BotCardVO.ts │ │ │ │ │ │ └── botCard.module.css │ │ │ │ │ ├── bot-form/ │ │ │ │ │ │ ├── BotForm.tsx │ │ │ │ │ │ └── ChooseEntity.ts │ │ │ │ │ ├── bot-log/ │ │ │ │ │ │ ├── BotLogManager.ts │ │ │ │ │ │ └── view/ │ │ │ │ │ │ ├── BotLogCard.tsx │ │ │ │ │ │ ├── BotLogListComponent.tsx │ │ │ │ │ │ └── botLog.module.css │ │ │ │ │ └── bot-session/ │ │ │ │ │ └── BotSessionMonitor.tsx │ │ │ │ └── page.tsx │ │ │ ├── components/ │ │ │ │ ├── account-settings-dialog/ │ │ │ │ │ └── AccountSettingsDialog.tsx │ │ │ │ ├── api-integration-dialog/ │ │ │ │ │ └── ApiIntegrationDialog.tsx │ │ │ │ ├── dynamic-form/ │ │ │ │ │ ├── DynamicFormComponent.tsx │ │ │ │ │ ├── DynamicFormItemComponent.tsx │ │ │ │ │ ├── DynamicFormItemConfig.ts │ │ │ │ │ └── N8nAuthFormComponent.tsx │ │ │ │ ├── home-sidebar/ │ │ │ │ │ ├── HomeSidebar.module.css │ │ │ │ │ ├── HomeSidebar.tsx │ │ │ │ │ ├── HomeSidebarChild.tsx │ │ │ │ │ └── sidbarConfigList.tsx │ │ │ │ ├── home-titlebar/ │ │ │ │ │ ├── HomeTitleBar.tsx │ │ │ │ │ └── HomeTittleBar.module.css │ │ │ │ ├── models-dialog/ │ │ │ │ │ ├── ModelsDialog.tsx │ │ │ │ │ ├── component/ │ │ │ │ │ │ └── provider-form/ │ │ │ │ │ │ └── ProviderForm.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── AddModelPopover.tsx │ │ │ │ │ │ ├── ExtraArgsEditor.tsx │ │ │ │ │ │ ├── ModelItem.tsx │ │ │ │ │ │ ├── ProviderCard.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── new-version-dialog/ │ │ │ │ │ └── NewVersionDialog.tsx │ │ │ │ ├── password-change-dialog/ │ │ │ │ │ └── PasswordChangeDialog.tsx │ │ │ │ └── survey/ │ │ │ │ └── SurveyWidget.tsx │ │ │ ├── knowledge/ │ │ │ │ ├── KBDetailDialog.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── kb-card/ │ │ │ │ │ │ ├── KBCard.module.css │ │ │ │ │ │ ├── KBCard.tsx │ │ │ │ │ │ └── KBCardVO.ts │ │ │ │ │ ├── kb-docs/ │ │ │ │ │ │ ├── FileUploadZone.tsx │ │ │ │ │ │ ├── KBDoc.tsx │ │ │ │ │ │ └── documents/ │ │ │ │ │ │ ├── columns.tsx │ │ │ │ │ │ └── data-table.tsx │ │ │ │ │ ├── kb-form/ │ │ │ │ │ │ ├── ChooseEntity.ts │ │ │ │ │ │ └── KBForm.tsx │ │ │ │ │ ├── kb-migration-dialog/ │ │ │ │ │ │ └── KBMigrationDialog.tsx │ │ │ │ │ └── kb-retrieve/ │ │ │ │ │ └── KBRetrieveGeneric.tsx │ │ │ │ ├── knowledgeBase.module.css │ │ │ │ └── page.tsx │ │ │ ├── layout.module.css │ │ │ ├── layout.tsx │ │ │ ├── loading.tsx │ │ │ ├── monitoring/ │ │ │ │ ├── components/ │ │ │ │ │ ├── ExportDropdown.tsx │ │ │ │ │ ├── MessageContentRenderer.tsx │ │ │ │ │ ├── MessageDetailsCard.tsx │ │ │ │ │ ├── filters/ │ │ │ │ │ │ └── MonitoringFilters.tsx │ │ │ │ │ └── overview-cards/ │ │ │ │ │ ├── MetricCard.tsx │ │ │ │ │ ├── OverviewCards.tsx │ │ │ │ │ └── TrafficChart.tsx │ │ │ │ ├── hooks/ │ │ │ │ │ ├── useMonitoringData.ts │ │ │ │ │ └── useMonitoringFilters.ts │ │ │ │ ├── page.tsx │ │ │ │ ├── types/ │ │ │ │ │ └── monitoring.ts │ │ │ │ └── utils/ │ │ │ │ └── dateUtils.ts │ │ │ ├── page.tsx │ │ │ ├── pipelines/ │ │ │ │ ├── PipelineDetailDialog.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── debug-dialog/ │ │ │ │ │ │ ├── AtBadge.tsx │ │ │ │ │ │ ├── DebugDialog.tsx │ │ │ │ │ │ └── ImagePreviewDialog.tsx │ │ │ │ │ ├── monitoring-tab/ │ │ │ │ │ │ └── PipelineMonitoringTab.tsx │ │ │ │ │ ├── pipeline-card/ │ │ │ │ │ │ ├── PipelineCard.tsx │ │ │ │ │ │ ├── PipelineCardVO.ts │ │ │ │ │ │ └── pipelineCard.module.css │ │ │ │ │ ├── pipeline-extensions/ │ │ │ │ │ │ └── PipelineExtension.tsx │ │ │ │ │ └── pipeline-form/ │ │ │ │ │ ├── PipelineFormComponent.tsx │ │ │ │ │ └── pipelineFormStyle.module.css │ │ │ │ ├── page.tsx │ │ │ │ └── pipelineConfig.module.css │ │ │ └── plugins/ │ │ │ ├── components/ │ │ │ │ ├── plugin-installed/ │ │ │ │ │ ├── PluginCardVO.ts │ │ │ │ │ ├── PluginComponentList.tsx │ │ │ │ │ ├── PluginInstalledComponent.tsx │ │ │ │ │ ├── plugin-card/ │ │ │ │ │ │ └── PluginCardComponent.tsx │ │ │ │ │ ├── plugin-form/ │ │ │ │ │ │ └── PluginForm.tsx │ │ │ │ │ └── plugin-readme/ │ │ │ │ │ └── PluginReadme.tsx │ │ │ │ └── plugin-market/ │ │ │ │ ├── PluginMarketComponent.tsx │ │ │ │ ├── RecommendationLists.tsx │ │ │ │ ├── TagsFilter.tsx │ │ │ │ └── plugin-market-card/ │ │ │ │ ├── PluginMarketCardComponent.tsx │ │ │ │ └── PluginMarketCardVO.ts │ │ │ ├── mcp-server/ │ │ │ │ ├── MCPCardVO.ts │ │ │ │ ├── MCPServerComponent.tsx │ │ │ │ ├── mcp-card/ │ │ │ │ │ └── MCPCardComponent.tsx │ │ │ │ └── mcp-form/ │ │ │ │ ├── MCPDeleteConfirmDialog.tsx │ │ │ │ └── MCPFormDialog.tsx │ │ │ ├── page.tsx │ │ │ └── plugins.module.css │ │ ├── infra/ │ │ │ ├── basic-component/ │ │ │ │ └── create-card-component/ │ │ │ │ ├── CreateCardComponent.tsx │ │ │ │ └── createCartComponent.module.css │ │ │ ├── entities/ │ │ │ │ ├── api/ │ │ │ │ │ └── index.ts │ │ │ │ ├── common.ts │ │ │ │ ├── form/ │ │ │ │ │ └── dynamic.ts │ │ │ │ ├── message/ │ │ │ │ │ └── index.ts │ │ │ │ ├── pipeline/ │ │ │ │ │ └── index.ts │ │ │ │ └── plugin/ │ │ │ │ └── index.ts │ │ │ ├── http/ │ │ │ │ ├── BackendClient.ts │ │ │ │ ├── BaseHttpClient.ts │ │ │ │ ├── CloudServiceClient.ts │ │ │ │ ├── HttpClient.ts │ │ │ │ ├── README.md │ │ │ │ ├── index.ts │ │ │ │ └── requestParam/ │ │ │ │ └── bots/ │ │ │ │ ├── GetBotLogsRequest.ts │ │ │ │ └── GetBotLogsResponse.ts │ │ │ └── websocket/ │ │ │ └── WebSocketClient.ts │ │ ├── layout.tsx │ │ ├── login/ │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── page.tsx │ │ ├── register/ │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── reset-password/ │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ └── utils/ │ │ └── versionCompare.ts │ ├── components/ │ │ ├── providers/ │ │ │ └── theme-provider.tsx │ │ └── ui/ │ │ ├── alert-dialog.tsx │ │ ├── alert.tsx │ │ ├── badge.tsx │ │ ├── breadcrumb.tsx │ │ ├── button.tsx │ │ ├── card.tsx │ │ ├── checkbox.tsx │ │ ├── collapsible.tsx │ │ ├── context-menu.tsx │ │ ├── dialog.tsx │ │ ├── dropdown-menu.tsx │ │ ├── emoji-picker.tsx │ │ ├── form.tsx │ │ ├── hover-card.tsx │ │ ├── input-otp.tsx │ │ ├── input.tsx │ │ ├── item.tsx │ │ ├── label.tsx │ │ ├── language-selector.tsx │ │ ├── loading-spinner.tsx │ │ ├── pagination.tsx │ │ ├── popover.tsx │ │ ├── scroll-area.tsx │ │ ├── select.tsx │ │ ├── separator.tsx │ │ ├── sheet.tsx │ │ ├── sidebar.tsx │ │ ├── skeleton.tsx │ │ ├── sonner.tsx │ │ ├── switch.tsx │ │ ├── table.tsx │ │ ├── tabs.tsx │ │ ├── textarea.tsx │ │ ├── theme-toggle.tsx │ │ ├── toggle-group.tsx │ │ ├── toggle.tsx │ │ └── tooltip.tsx │ ├── hooks/ │ │ ├── use-mobile.ts │ │ └── useAsyncTask.ts │ ├── i18n/ │ │ ├── I18nProvider.tsx │ │ ├── index.ts │ │ └── locales/ │ │ ├── en-US.ts │ │ ├── ja-JP.ts │ │ ├── zh-Hans.ts │ │ └── zh-Hant.ts │ ├── i18next.d.ts │ ├── lib/ │ │ └── utils.ts │ └── styles/ │ └── github-markdown.css ├── tsconfig.json └── web@0.1.0