gitextract_qqwyrvoh/ ├── .dockerignore ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── PLUGIN_PUBLISH.yml │ │ ├── bug-report.yml │ │ └── feature-request.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── auto_assign.yml │ ├── copilot-instructions.md │ ├── dependabot.yml │ └── workflows/ │ ├── build-docs.yml │ ├── code-format.yml │ ├── codeql.yml │ ├── coverage_test.yml │ ├── dashboard_ci.yml │ ├── docker-image.yml │ ├── pr-title-check.yml │ ├── release.yml │ ├── smoke_test.yml │ ├── stale.yml │ └── sync-wiki.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .python-version ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── EULA.md ├── FIRST_NOTICE.en-US.md ├── FIRST_NOTICE.md ├── LICENSE ├── Makefile ├── README.md ├── README_fr.md ├── README_ja.md ├── README_ru.md ├── README_zh-TW.md ├── README_zh.md ├── astrbot/ │ ├── __init__.py │ ├── api/ │ │ ├── __init__.py │ │ ├── all.py │ │ ├── event/ │ │ │ ├── __init__.py │ │ │ └── filter/ │ │ │ └── __init__.py │ │ ├── message_components.py │ │ ├── platform/ │ │ │ └── __init__.py │ │ ├── provider/ │ │ │ └── __init__.py │ │ ├── star/ │ │ │ └── __init__.py │ │ └── util/ │ │ └── __init__.py │ ├── builtin_stars/ │ │ ├── astrbot/ │ │ │ ├── long_term_memory.py │ │ │ ├── main.py │ │ │ └── metadata.yaml │ │ ├── builtin_commands/ │ │ │ ├── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── admin.py │ │ │ │ ├── alter_cmd.py │ │ │ │ ├── conversation.py │ │ │ │ ├── help.py │ │ │ │ ├── llm.py │ │ │ │ ├── persona.py │ │ │ │ ├── plugin.py │ │ │ │ ├── provider.py │ │ │ │ ├── setunset.py │ │ │ │ ├── sid.py │ │ │ │ ├── t2i.py │ │ │ │ ├── tts.py │ │ │ │ └── utils/ │ │ │ │ └── rst_scene.py │ │ │ ├── main.py │ │ │ └── metadata.yaml │ │ ├── session_controller/ │ │ │ ├── main.py │ │ │ └── metadata.yaml │ │ └── web_searcher/ │ │ ├── engines/ │ │ │ ├── __init__.py │ │ │ ├── bing.py │ │ │ └── sogo.py │ │ ├── main.py │ │ └── metadata.yaml │ ├── cli/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── commands/ │ │ │ ├── __init__.py │ │ │ ├── cmd_conf.py │ │ │ ├── cmd_init.py │ │ │ ├── cmd_plug.py │ │ │ └── cmd_run.py │ │ └── utils/ │ │ ├── __init__.py │ │ ├── basic.py │ │ ├── plugin.py │ │ └── version_comparator.py │ ├── core/ │ │ ├── __init__.py │ │ ├── agent/ │ │ │ ├── agent.py │ │ │ ├── context/ │ │ │ │ ├── compressor.py │ │ │ │ ├── config.py │ │ │ │ ├── manager.py │ │ │ │ ├── token_counter.py │ │ │ │ └── truncator.py │ │ │ ├── handoff.py │ │ │ ├── hooks.py │ │ │ ├── mcp_client.py │ │ │ ├── message.py │ │ │ ├── response.py │ │ │ ├── run_context.py │ │ │ ├── runners/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── coze/ │ │ │ │ │ ├── coze_agent_runner.py │ │ │ │ │ └── coze_api_client.py │ │ │ │ ├── dashscope/ │ │ │ │ │ └── dashscope_agent_runner.py │ │ │ │ ├── deerflow/ │ │ │ │ │ ├── constants.py │ │ │ │ │ ├── deerflow_agent_runner.py │ │ │ │ │ ├── deerflow_api_client.py │ │ │ │ │ ├── deerflow_content_mapper.py │ │ │ │ │ └── deerflow_stream_utils.py │ │ │ │ ├── dify/ │ │ │ │ │ ├── dify_agent_runner.py │ │ │ │ │ └── dify_api_client.py │ │ │ │ └── tool_loop_agent_runner.py │ │ │ ├── tool.py │ │ │ ├── tool_executor.py │ │ │ └── tool_image_cache.py │ │ ├── astr_agent_context.py │ │ ├── astr_agent_hooks.py │ │ ├── astr_agent_run_util.py │ │ ├── astr_agent_tool_exec.py │ │ ├── astr_main_agent.py │ │ ├── astr_main_agent_resources.py │ │ ├── astrbot_config_mgr.py │ │ ├── backup/ │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── exporter.py │ │ │ └── importer.py │ │ ├── computer/ │ │ │ ├── booters/ │ │ │ │ ├── base.py │ │ │ │ ├── bay_manager.py │ │ │ │ ├── boxlite.py │ │ │ │ ├── local.py │ │ │ │ ├── shipyard.py │ │ │ │ └── shipyard_neo.py │ │ │ ├── computer_client.py │ │ │ ├── olayer/ │ │ │ │ ├── __init__.py │ │ │ │ ├── browser.py │ │ │ │ ├── filesystem.py │ │ │ │ ├── python.py │ │ │ │ └── shell.py │ │ │ └── tools/ │ │ │ ├── __init__.py │ │ │ ├── browser.py │ │ │ ├── fs.py │ │ │ ├── neo_skills.py │ │ │ ├── permissions.py │ │ │ ├── python.py │ │ │ └── shell.py │ │ ├── config/ │ │ │ ├── __init__.py │ │ │ ├── astrbot_config.py │ │ │ ├── default.py │ │ │ └── i18n_utils.py │ │ ├── conversation_mgr.py │ │ ├── core_lifecycle.py │ │ ├── cron/ │ │ │ ├── __init__.py │ │ │ ├── events.py │ │ │ └── manager.py │ │ ├── db/ │ │ │ ├── __init__.py │ │ │ ├── migration/ │ │ │ │ ├── helper.py │ │ │ │ ├── migra_3_to_4.py │ │ │ │ ├── migra_45_to_46.py │ │ │ │ ├── migra_token_usage.py │ │ │ │ ├── migra_webchat_session.py │ │ │ │ ├── shared_preferences_v3.py │ │ │ │ └── sqlite_v3.py │ │ │ ├── po.py │ │ │ ├── sqlite.py │ │ │ └── vec_db/ │ │ │ ├── base.py │ │ │ └── faiss_impl/ │ │ │ ├── __init__.py │ │ │ ├── document_storage.py │ │ │ ├── embedding_storage.py │ │ │ ├── sqlite_init.sql │ │ │ └── vec_db.py │ │ ├── event_bus.py │ │ ├── exceptions.py │ │ ├── file_token_service.py │ │ ├── initial_loader.py │ │ ├── knowledge_base/ │ │ │ ├── chunking/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── fixed_size.py │ │ │ │ └── recursive.py │ │ │ ├── kb_db_sqlite.py │ │ │ ├── kb_helper.py │ │ │ ├── kb_mgr.py │ │ │ ├── models.py │ │ │ ├── parsers/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── markitdown_parser.py │ │ │ │ ├── pdf_parser.py │ │ │ │ ├── text_parser.py │ │ │ │ ├── url_parser.py │ │ │ │ └── util.py │ │ │ ├── prompts.py │ │ │ └── retrieval/ │ │ │ ├── __init__.py │ │ │ ├── hit_stopwords.txt │ │ │ ├── manager.py │ │ │ ├── rank_fusion.py │ │ │ └── sparse_retriever.py │ │ ├── log.py │ │ ├── message/ │ │ │ ├── components.py │ │ │ └── message_event_result.py │ │ ├── persona_error_reply.py │ │ ├── persona_mgr.py │ │ ├── pipeline/ │ │ │ ├── __init__.py │ │ │ ├── bootstrap.py │ │ │ ├── content_safety_check/ │ │ │ │ ├── stage.py │ │ │ │ └── strategies/ │ │ │ │ ├── __init__.py │ │ │ │ ├── baidu_aip.py │ │ │ │ ├── keywords.py │ │ │ │ └── strategy.py │ │ │ ├── context.py │ │ │ ├── context_utils.py │ │ │ ├── preprocess_stage/ │ │ │ │ └── stage.py │ │ │ ├── process_stage/ │ │ │ │ ├── follow_up.py │ │ │ │ ├── method/ │ │ │ │ │ ├── agent_request.py │ │ │ │ │ ├── agent_sub_stages/ │ │ │ │ │ │ ├── internal.py │ │ │ │ │ │ └── third_party.py │ │ │ │ │ └── star_request.py │ │ │ │ └── stage.py │ │ │ ├── rate_limit_check/ │ │ │ │ └── stage.py │ │ │ ├── respond/ │ │ │ │ └── stage.py │ │ │ ├── result_decorate/ │ │ │ │ └── stage.py │ │ │ ├── scheduler.py │ │ │ ├── session_status_check/ │ │ │ │ └── stage.py │ │ │ ├── stage.py │ │ │ ├── stage_order.py │ │ │ ├── waking_check/ │ │ │ │ └── stage.py │ │ │ └── whitelist_check/ │ │ │ └── stage.py │ │ ├── platform/ │ │ │ ├── __init__.py │ │ │ ├── astr_message_event.py │ │ │ ├── astrbot_message.py │ │ │ ├── manager.py │ │ │ ├── message_session.py │ │ │ ├── message_type.py │ │ │ ├── platform.py │ │ │ ├── platform_metadata.py │ │ │ ├── register.py │ │ │ └── sources/ │ │ │ ├── aiocqhttp/ │ │ │ │ ├── aiocqhttp_message_event.py │ │ │ │ └── aiocqhttp_platform_adapter.py │ │ │ ├── dingtalk/ │ │ │ │ ├── dingtalk_adapter.py │ │ │ │ └── dingtalk_event.py │ │ │ ├── discord/ │ │ │ │ ├── client.py │ │ │ │ ├── components.py │ │ │ │ ├── discord_platform_adapter.py │ │ │ │ └── discord_platform_event.py │ │ │ ├── kook/ │ │ │ │ ├── kook_adapter.py │ │ │ │ ├── kook_client.py │ │ │ │ ├── kook_config.py │ │ │ │ ├── kook_event.py │ │ │ │ └── kook_types.py │ │ │ ├── lark/ │ │ │ │ ├── lark_adapter.py │ │ │ │ ├── lark_event.py │ │ │ │ └── server.py │ │ │ ├── line/ │ │ │ │ ├── line_adapter.py │ │ │ │ ├── line_api.py │ │ │ │ └── line_event.py │ │ │ ├── misskey/ │ │ │ │ ├── misskey_adapter.py │ │ │ │ ├── misskey_api.py │ │ │ │ ├── misskey_event.py │ │ │ │ └── misskey_utils.py │ │ │ ├── qqofficial/ │ │ │ │ ├── qqofficial_message_event.py │ │ │ │ └── qqofficial_platform_adapter.py │ │ │ ├── qqofficial_webhook/ │ │ │ │ ├── qo_webhook_adapter.py │ │ │ │ ├── qo_webhook_event.py │ │ │ │ └── qo_webhook_server.py │ │ │ ├── satori/ │ │ │ │ ├── satori_adapter.py │ │ │ │ └── satori_event.py │ │ │ ├── slack/ │ │ │ │ ├── client.py │ │ │ │ ├── slack_adapter.py │ │ │ │ └── slack_event.py │ │ │ ├── telegram/ │ │ │ │ ├── tg_adapter.py │ │ │ │ └── tg_event.py │ │ │ ├── webchat/ │ │ │ │ ├── message_parts_helper.py │ │ │ │ ├── webchat_adapter.py │ │ │ │ ├── webchat_event.py │ │ │ │ └── webchat_queue_mgr.py │ │ │ ├── wecom/ │ │ │ │ ├── wecom_adapter.py │ │ │ │ ├── wecom_event.py │ │ │ │ ├── wecom_kf.py │ │ │ │ └── wecom_kf_message.py │ │ │ ├── wecom_ai_bot/ │ │ │ │ ├── WXBizJsonMsgCrypt.py │ │ │ │ ├── __init__.py │ │ │ │ ├── ierror.py │ │ │ │ ├── wecomai_adapter.py │ │ │ │ ├── wecomai_api.py │ │ │ │ ├── wecomai_event.py │ │ │ │ ├── wecomai_long_connection.py │ │ │ │ ├── wecomai_queue_mgr.py │ │ │ │ ├── wecomai_server.py │ │ │ │ ├── wecomai_utils.py │ │ │ │ └── wecomai_webhook.py │ │ │ └── weixin_official_account/ │ │ │ ├── weixin_offacc_adapter.py │ │ │ └── weixin_offacc_event.py │ │ ├── platform_message_history_mgr.py │ │ ├── provider/ │ │ │ ├── __init__.py │ │ │ ├── entites.py │ │ │ ├── entities.py │ │ │ ├── func_tool_manager.py │ │ │ ├── manager.py │ │ │ ├── provider.py │ │ │ ├── register.py │ │ │ └── sources/ │ │ │ ├── anthropic_source.py │ │ │ ├── azure_tts_source.py │ │ │ ├── bailian_rerank_source.py │ │ │ ├── dashscope_tts.py │ │ │ ├── edge_tts_source.py │ │ │ ├── fishaudio_tts_api_source.py │ │ │ ├── gemini_embedding_source.py │ │ │ ├── gemini_source.py │ │ │ ├── gemini_tts_source.py │ │ │ ├── genie_tts.py │ │ │ ├── groq_source.py │ │ │ ├── gsv_selfhosted_source.py │ │ │ ├── gsvi_tts_source.py │ │ │ ├── kimi_code_source.py │ │ │ ├── minimax_tts_api_source.py │ │ │ ├── oai_aihubmix_source.py │ │ │ ├── openai_embedding_source.py │ │ │ ├── openai_source.py │ │ │ ├── openai_tts_api_source.py │ │ │ ├── openrouter_source.py │ │ │ ├── sensevoice_selfhosted_source.py │ │ │ ├── vllm_rerank_source.py │ │ │ ├── volcengine_tts.py │ │ │ ├── whisper_api_source.py │ │ │ ├── whisper_selfhosted_source.py │ │ │ ├── xai_source.py │ │ │ ├── xinference_rerank_source.py │ │ │ ├── xinference_stt_provider.py │ │ │ └── zhipu_source.py │ │ ├── sentinels.py │ │ ├── skills/ │ │ │ ├── __init__.py │ │ │ ├── neo_skill_sync.py │ │ │ └── skill_manager.py │ │ ├── star/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── command_management.py │ │ │ ├── config.py │ │ │ ├── context.py │ │ │ ├── error_messages.py │ │ │ ├── filter/ │ │ │ │ ├── __init__.py │ │ │ │ ├── command.py │ │ │ │ ├── command_group.py │ │ │ │ ├── custom_filter.py │ │ │ │ ├── event_message_type.py │ │ │ │ ├── permission.py │ │ │ │ ├── platform_adapter_type.py │ │ │ │ └── regex.py │ │ │ ├── register/ │ │ │ │ ├── __init__.py │ │ │ │ ├── star.py │ │ │ │ └── star_handler.py │ │ │ ├── session_llm_manager.py │ │ │ ├── session_plugin_manager.py │ │ │ ├── star.py │ │ │ ├── star_handler.py │ │ │ ├── star_manager.py │ │ │ ├── star_tools.py │ │ │ └── updator.py │ │ ├── subagent_orchestrator.py │ │ ├── tools/ │ │ │ └── cron_tools.py │ │ ├── umop_config_router.py │ │ ├── updator.py │ │ ├── utils/ │ │ │ ├── active_event_registry.py │ │ │ ├── astrbot_path.py │ │ │ ├── command_parser.py │ │ │ ├── config_number.py │ │ │ ├── core_constraints.py │ │ │ ├── datetime_utils.py │ │ │ ├── error_redaction.py │ │ │ ├── file_extract.py │ │ │ ├── history_saver.py │ │ │ ├── http_ssl.py │ │ │ ├── image_ref_utils.py │ │ │ ├── io.py │ │ │ ├── llm_metadata.py │ │ │ ├── log_pipe.py │ │ │ ├── media_utils.py │ │ │ ├── metrics.py │ │ │ ├── migra_helper.py │ │ │ ├── network_utils.py │ │ │ ├── path_util.py │ │ │ ├── pip_installer.py │ │ │ ├── plugin_kv_store.py │ │ │ ├── quoted_message/ │ │ │ │ ├── __init__.py │ │ │ │ ├── chain_parser.py │ │ │ │ ├── extractor.py │ │ │ │ ├── image_refs.py │ │ │ │ ├── image_resolver.py │ │ │ │ ├── onebot_client.py │ │ │ │ └── settings.py │ │ │ ├── quoted_message_parser.py │ │ │ ├── requirements_utils.py │ │ │ ├── runtime_env.py │ │ │ ├── session_lock.py │ │ │ ├── session_waiter.py │ │ │ ├── shared_preferences.py │ │ │ ├── string_utils.py │ │ │ ├── t2i/ │ │ │ │ ├── __init__.py │ │ │ │ ├── local_strategy.py │ │ │ │ ├── network_strategy.py │ │ │ │ ├── renderer.py │ │ │ │ ├── template/ │ │ │ │ │ ├── astrbot_powershell.html │ │ │ │ │ └── base.html │ │ │ │ └── template_manager.py │ │ │ ├── temp_dir_cleaner.py │ │ │ ├── tencent_record_helper.py │ │ │ ├── trace.py │ │ │ ├── version_comparator.py │ │ │ └── webhook_utils.py │ │ └── zip_updator.py │ ├── dashboard/ │ │ ├── routes/ │ │ │ ├── __init__.py │ │ │ ├── api_key.py │ │ │ ├── auth.py │ │ │ ├── backup.py │ │ │ ├── chat.py │ │ │ ├── chatui_project.py │ │ │ ├── command.py │ │ │ ├── config.py │ │ │ ├── conversation.py │ │ │ ├── cron.py │ │ │ ├── file.py │ │ │ ├── knowledge_base.py │ │ │ ├── live_chat.py │ │ │ ├── log.py │ │ │ ├── open_api.py │ │ │ ├── persona.py │ │ │ ├── platform.py │ │ │ ├── plugin.py │ │ │ ├── route.py │ │ │ ├── session_management.py │ │ │ ├── skills.py │ │ │ ├── stat.py │ │ │ ├── static_file.py │ │ │ ├── subagent.py │ │ │ ├── t2i.py │ │ │ ├── tools.py │ │ │ ├── update.py │ │ │ └── util.py │ │ ├── server.py │ │ └── utils.py │ └── utils/ │ ├── __init__.py │ └── http_ssl_common.py ├── changelogs/ │ ├── v3.4.0.md │ ├── v3.4.1.md │ ├── v3.4.10.md │ ├── v3.4.11.md │ ├── v3.4.12.md │ ├── v3.4.13.md │ ├── v3.4.14.md │ ├── v3.4.15.md │ ├── v3.4.16.md │ ├── v3.4.17.md │ ├── v3.4.18.md │ ├── v3.4.19.md │ ├── v3.4.20.md │ ├── v3.4.21.md │ ├── v3.4.22.md │ ├── v3.4.23.md │ ├── v3.4.24.md │ ├── v3.4.25.md │ ├── v3.4.26.md │ ├── v3.4.27.md │ ├── v3.4.28.md │ ├── v3.4.29.md │ ├── v3.4.3.md │ ├── v3.4.30.md │ ├── v3.4.31.md │ ├── v3.4.32.md │ ├── v3.4.33.md │ ├── v3.4.35.md │ ├── v3.4.36.md │ ├── v3.4.37.md │ ├── v3.4.38.md │ ├── v3.4.39.md │ ├── v3.4.4.md │ ├── v3.4.5.md │ ├── v3.4.6.md │ ├── v3.4.7.md │ ├── v3.4.8.md │ ├── v3.4.9.md │ ├── v3.5.0.md │ ├── v3.5.1.md │ ├── v3.5.10.md │ ├── v3.5.11.md │ ├── v3.5.12.md │ ├── v3.5.13.md │ ├── v3.5.14.md │ ├── v3.5.15.md │ ├── v3.5.16.md │ ├── v3.5.17.md │ ├── v3.5.18.md │ ├── v3.5.19.md │ ├── v3.5.2.md │ ├── v3.5.20.md │ ├── v3.5.21.md │ ├── v3.5.22.md │ ├── v3.5.23.md │ ├── v3.5.24.md │ ├── v3.5.25.md │ ├── v3.5.26.md │ ├── v3.5.27.md │ ├── v3.5.3.1.md │ ├── v3.5.3.2.md │ ├── v3.5.3.md │ ├── v3.5.4.md │ ├── v3.5.5.md │ ├── v3.5.6.md │ ├── v3.5.7.md │ ├── v3.5.8.md │ ├── v3.5.9.md │ ├── v4.0.0-beta.3.md │ ├── v4.0.0-beta.4.md │ ├── v4.0.0-beta.5.md │ ├── v4.0.0.md │ ├── v4.1.0.md │ ├── v4.1.1.md │ ├── v4.1.2.md │ ├── v4.1.3.md │ ├── v4.1.4.md │ ├── v4.1.5.md │ ├── v4.1.6.md │ ├── v4.1.7.md │ ├── v4.10.0-alpha.1.md │ ├── v4.10.0-alpha.2.md │ ├── v4.10.0.md │ ├── v4.10.1.md │ ├── v4.10.2.md │ ├── v4.10.3.md │ ├── v4.10.4.md │ ├── v4.10.5.md │ ├── v4.10.6.md │ ├── v4.11.0.md │ ├── v4.11.1.md │ ├── v4.11.2.md │ ├── v4.11.3.md │ ├── v4.11.4.md │ ├── v4.12.0.md │ ├── v4.12.1.md │ ├── v4.12.2.md │ ├── v4.12.3.md │ ├── v4.12.4.md │ ├── v4.13.0.md │ ├── v4.13.1.md │ ├── v4.13.2.md │ ├── v4.14.0.md │ ├── v4.14.1.md │ ├── v4.14.2.md │ ├── v4.14.3.md │ ├── v4.14.4.md │ ├── v4.14.5.md │ ├── v4.14.6.md │ ├── v4.14.7.md │ ├── v4.14.8.md │ ├── v4.15.0.md │ ├── v4.16.0.md │ ├── v4.17.0.md │ ├── v4.17.1.md │ ├── v4.17.2.md │ ├── v4.17.3.md │ ├── v4.17.4.md │ ├── v4.17.5.md │ ├── v4.17.6.md │ ├── v4.18.0.md │ ├── v4.18.1.md │ ├── v4.18.2.md │ ├── v4.18.3.md │ ├── v4.19.2.md │ ├── v4.19.3.md │ ├── v4.19.4.md │ ├── v4.19.5.md │ ├── v4.2.0.md │ ├── v4.2.1.md │ ├── v4.20.0.md │ ├── v4.20.1.md │ ├── v4.3.0.md │ ├── v4.3.1.md │ ├── v4.3.2.md │ ├── v4.3.3.md │ ├── v4.3.5.md │ ├── v4.5.0.md │ ├── v4.5.1.md │ ├── v4.5.2.md │ ├── v4.5.3.md │ ├── v4.5.4.md │ ├── v4.5.5.md │ ├── v4.5.6.md │ ├── v4.5.7.md │ ├── v4.5.8.md │ ├── v4.6.0.md │ ├── v4.6.1.md │ ├── v4.7.0.md │ ├── v4.7.1.md │ ├── v4.7.3.md │ ├── v4.7.4.md │ ├── v4.8.0.md │ ├── v4.9.0.md │ ├── v4.9.1.md │ └── v4.9.2.md ├── compose-with-shipyard.yml ├── compose.yml ├── dashboard/ │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── env.d.ts │ ├── index.html │ ├── package.json │ ├── public/ │ │ ├── _redirects │ │ └── robots.txt │ ├── scripts/ │ │ └── subset-mdi-font.mjs │ ├── src/ │ │ ├── App.vue │ │ ├── assets/ │ │ │ └── mdi-subset/ │ │ │ └── materialdesignicons-subset.css │ │ ├── components/ │ │ │ ├── ConfirmDialog.vue │ │ │ ├── chat/ │ │ │ │ ├── Chat.vue │ │ │ │ ├── ChatInput.vue │ │ │ │ ├── ConfigSelector.vue │ │ │ │ ├── ConversationSidebar.vue │ │ │ │ ├── LiveMode.vue │ │ │ │ ├── LiveOrb.vue │ │ │ │ ├── MessageList.vue │ │ │ │ ├── ProjectDialog.vue │ │ │ │ ├── ProjectList.vue │ │ │ │ ├── ProjectView.vue │ │ │ │ ├── ProviderConfigDialog.vue │ │ │ │ ├── ProviderModelMenu.vue │ │ │ │ ├── StandaloneChat.vue │ │ │ │ ├── WelcomeView.vue │ │ │ │ └── message_list_comps/ │ │ │ │ ├── ActionRef.vue │ │ │ │ ├── IPythonToolBlock.vue │ │ │ │ ├── MessagePartsRenderer.vue │ │ │ │ ├── ReasoningBlock.vue │ │ │ │ ├── RefNode.vue │ │ │ │ ├── RefsSidebar.vue │ │ │ │ ├── ToolCallCard.vue │ │ │ │ └── ToolCallItem.vue │ │ │ ├── config/ │ │ │ │ ├── AstrBotCoreConfigWrapper.vue │ │ │ │ └── UnsavedChangesConfirmDialog.vue │ │ │ ├── extension/ │ │ │ │ ├── MarketPluginCard.vue │ │ │ │ ├── McpServersSection.vue │ │ │ │ ├── PluginSortControl.vue │ │ │ │ ├── SkillsSection.vue │ │ │ │ └── componentPanel/ │ │ │ │ ├── components/ │ │ │ │ │ ├── CommandFilters.vue │ │ │ │ │ ├── CommandTable.vue │ │ │ │ │ ├── DetailsDialog.vue │ │ │ │ │ ├── RenameDialog.vue │ │ │ │ │ └── ToolTable.vue │ │ │ │ ├── composables/ │ │ │ │ │ ├── useCommandActions.ts │ │ │ │ │ ├── useCommandFilters.ts │ │ │ │ │ └── useComponentData.ts │ │ │ │ ├── index.vue │ │ │ │ └── types.ts │ │ │ ├── folder/ │ │ │ │ ├── BaseCreateFolderDialog.vue │ │ │ │ ├── BaseFolderBreadcrumb.vue │ │ │ │ ├── BaseFolderCard.vue │ │ │ │ ├── BaseFolderItemSelector.vue │ │ │ │ ├── BaseFolderTree.vue │ │ │ │ ├── BaseFolderTreeNode.vue │ │ │ │ ├── BaseMoveTargetNode.vue │ │ │ │ ├── BaseMoveToFolderDialog.vue │ │ │ │ ├── README.md │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ └── useFolderManager.ts │ │ │ ├── platform/ │ │ │ │ └── AddNewPlatform.vue │ │ │ ├── provider/ │ │ │ │ ├── AddNewProvider.vue │ │ │ │ ├── ProviderModelsPanel.vue │ │ │ │ └── ProviderSourcesPanel.vue │ │ │ └── shared/ │ │ │ ├── AstrBotConfig.vue │ │ │ ├── AstrBotConfigV4.vue │ │ │ ├── BackupDialog.vue │ │ │ ├── ChangelogDialog.vue │ │ │ ├── ConfigItemRenderer.vue │ │ │ ├── ConsoleDisplayer.vue │ │ │ ├── ExtensionCard.vue │ │ │ ├── FileConfigItem.vue │ │ │ ├── ItemCard.vue │ │ │ ├── ItemCardGrid.vue │ │ │ ├── KnowledgeBaseSelector.vue │ │ │ ├── LanguageSwitcher.vue │ │ │ ├── ListConfigItem.vue │ │ │ ├── Logo.vue │ │ │ ├── MigrationDialog.vue │ │ │ ├── ObjectEditor.vue │ │ │ ├── PersonaForm.vue │ │ │ ├── PersonaQuickPreview.vue │ │ │ ├── PersonaSelector.vue │ │ │ ├── PluginPlatformChip.vue │ │ │ ├── PluginSetSelector.vue │ │ │ ├── ProviderSelector.vue │ │ │ ├── ProxySelector.vue │ │ │ ├── ReadmeDialog.vue │ │ │ ├── SidebarCustomizer.vue │ │ │ ├── StyledMenu.vue │ │ │ ├── T2ITemplateEditor.vue │ │ │ ├── TemplateListEditor.vue │ │ │ ├── TraceDisplayer.vue │ │ │ ├── UninstallConfirmDialog.vue │ │ │ └── WaitingForRestart.vue │ │ ├── composables/ │ │ │ ├── useConversations.ts │ │ │ ├── useMediaHandling.ts │ │ │ ├── useMessages.ts │ │ │ ├── useProjects.ts │ │ │ ├── useProviderSources.ts │ │ │ ├── useRecording.ts │ │ │ ├── useSessions.ts │ │ │ └── useVADRecording.ts │ │ ├── config.ts │ │ ├── i18n/ │ │ │ ├── composables.ts │ │ │ ├── loader.ts │ │ │ ├── locales/ │ │ │ │ ├── en-US/ │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── actions.json │ │ │ │ │ │ ├── common.json │ │ │ │ │ │ ├── header.json │ │ │ │ │ │ ├── navigation.json │ │ │ │ │ │ ├── shared.json │ │ │ │ │ │ └── status.json │ │ │ │ │ ├── features/ │ │ │ │ │ │ ├── about.json │ │ │ │ │ │ ├── alkaid/ │ │ │ │ │ │ │ ├── index.json │ │ │ │ │ │ │ ├── knowledge-base.json │ │ │ │ │ │ │ └── memory.json │ │ │ │ │ │ ├── auth.json │ │ │ │ │ │ ├── chart.json │ │ │ │ │ │ ├── chat.json │ │ │ │ │ │ ├── command.json │ │ │ │ │ │ ├── config-metadata.json │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── console.json │ │ │ │ │ │ ├── conversation.json │ │ │ │ │ │ ├── cron.json │ │ │ │ │ │ ├── dashboard.json │ │ │ │ │ │ ├── extension.json │ │ │ │ │ │ ├── knowledge-base/ │ │ │ │ │ │ │ ├── detail.json │ │ │ │ │ │ │ ├── document.json │ │ │ │ │ │ │ └── index.json │ │ │ │ │ │ ├── migration.json │ │ │ │ │ │ ├── persona.json │ │ │ │ │ │ ├── platform.json │ │ │ │ │ │ ├── provider.json │ │ │ │ │ │ ├── session-management.json │ │ │ │ │ │ ├── settings.json │ │ │ │ │ │ ├── subagent.json │ │ │ │ │ │ ├── tool-use.json │ │ │ │ │ │ ├── trace.json │ │ │ │ │ │ └── welcome.json │ │ │ │ │ └── messages/ │ │ │ │ │ ├── errors.json │ │ │ │ │ ├── success.json │ │ │ │ │ └── validation.json │ │ │ │ ├── ru-RU/ │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── actions.json │ │ │ │ │ │ ├── common.json │ │ │ │ │ │ ├── header.json │ │ │ │ │ │ ├── navigation.json │ │ │ │ │ │ ├── shared.json │ │ │ │ │ │ └── status.json │ │ │ │ │ ├── features/ │ │ │ │ │ │ ├── about.json │ │ │ │ │ │ ├── alkaid/ │ │ │ │ │ │ │ ├── index.json │ │ │ │ │ │ │ ├── knowledge-base.json │ │ │ │ │ │ │ └── memory.json │ │ │ │ │ │ ├── auth.json │ │ │ │ │ │ ├── chart.json │ │ │ │ │ │ ├── chat.json │ │ │ │ │ │ ├── command.json │ │ │ │ │ │ ├── config-metadata.json │ │ │ │ │ │ ├── config.json │ │ │ │ │ │ ├── console.json │ │ │ │ │ │ ├── conversation.json │ │ │ │ │ │ ├── cron.json │ │ │ │ │ │ ├── dashboard.json │ │ │ │ │ │ ├── extension.json │ │ │ │ │ │ ├── knowledge-base/ │ │ │ │ │ │ │ ├── detail.json │ │ │ │ │ │ │ ├── document.json │ │ │ │ │ │ │ └── index.json │ │ │ │ │ │ ├── migration.json │ │ │ │ │ │ ├── persona.json │ │ │ │ │ │ ├── platform.json │ │ │ │ │ │ ├── provider.json │ │ │ │ │ │ ├── session-management.json │ │ │ │ │ │ ├── settings.json │ │ │ │ │ │ ├── subagent.json │ │ │ │ │ │ ├── tool-use.json │ │ │ │ │ │ ├── trace.json │ │ │ │ │ │ └── welcome.json │ │ │ │ │ └── messages/ │ │ │ │ │ ├── errors.json │ │ │ │ │ ├── success.json │ │ │ │ │ └── validation.json │ │ │ │ └── zh-CN/ │ │ │ │ ├── core/ │ │ │ │ │ ├── actions.json │ │ │ │ │ ├── common.json │ │ │ │ │ ├── header.json │ │ │ │ │ ├── navigation.json │ │ │ │ │ ├── shared.json │ │ │ │ │ └── status.json │ │ │ │ ├── features/ │ │ │ │ │ ├── about.json │ │ │ │ │ ├── alkaid/ │ │ │ │ │ │ ├── index.json │ │ │ │ │ │ ├── knowledge-base.json │ │ │ │ │ │ └── memory.json │ │ │ │ │ ├── auth.json │ │ │ │ │ ├── chart.json │ │ │ │ │ ├── chat.json │ │ │ │ │ ├── command.json │ │ │ │ │ ├── config-metadata.json │ │ │ │ │ ├── config.json │ │ │ │ │ ├── console.json │ │ │ │ │ ├── conversation.json │ │ │ │ │ ├── cron.json │ │ │ │ │ ├── dashboard.json │ │ │ │ │ ├── extension.json │ │ │ │ │ ├── knowledge-base/ │ │ │ │ │ │ ├── detail.json │ │ │ │ │ │ ├── document.json │ │ │ │ │ │ └── index.json │ │ │ │ │ ├── migration.json │ │ │ │ │ ├── persona.json │ │ │ │ │ ├── platform.json │ │ │ │ │ ├── provider.json │ │ │ │ │ ├── session-management.json │ │ │ │ │ ├── settings.json │ │ │ │ │ ├── subagent.json │ │ │ │ │ ├── tool-use.json │ │ │ │ │ ├── trace.json │ │ │ │ │ └── welcome.json │ │ │ │ └── messages/ │ │ │ │ ├── errors.json │ │ │ │ ├── success.json │ │ │ │ └── validation.json │ │ │ ├── tools/ │ │ │ │ └── index.ts │ │ │ ├── translations.ts │ │ │ ├── types.ts │ │ │ └── validator.ts │ │ ├── layouts/ │ │ │ ├── blank/ │ │ │ │ └── BlankLayout.vue │ │ │ └── full/ │ │ │ ├── FullLayout.vue │ │ │ ├── vertical-header/ │ │ │ │ └── VerticalHeader.vue │ │ │ └── vertical-sidebar/ │ │ │ ├── NavItem.vue │ │ │ ├── VerticalSidebar.vue │ │ │ └── sidebarItem.ts │ │ ├── main.ts │ │ ├── plugins/ │ │ │ ├── confirmPlugin.ts │ │ │ └── vuetify.ts │ │ ├── router/ │ │ │ ├── AuthRoutes.ts │ │ │ ├── ChatBoxRoutes.ts │ │ │ ├── MainRoutes.ts │ │ │ ├── index.ts │ │ │ └── routeConstants.mjs │ │ ├── scss/ │ │ │ ├── _override.scss │ │ │ ├── _variables.scss │ │ │ ├── components/ │ │ │ │ ├── _VButtons.scss │ │ │ │ ├── _VCard.scss │ │ │ │ ├── _VField.scss │ │ │ │ ├── _VInput.scss │ │ │ │ ├── _VNavigationDrawer.scss │ │ │ │ ├── _VScrollbar.scss │ │ │ │ ├── _VShadow.scss │ │ │ │ ├── _VTabs.scss │ │ │ │ └── _VTextField.scss │ │ │ ├── layout/ │ │ │ │ ├── _container.scss │ │ │ │ └── _sidebar.scss │ │ │ ├── pages/ │ │ │ │ └── _dashboards.scss │ │ │ └── style.scss │ │ ├── stores/ │ │ │ ├── auth.ts │ │ │ ├── common.js │ │ │ ├── customizer.ts │ │ │ ├── personaStore.ts │ │ │ ├── routerLoading.ts │ │ │ └── toast.js │ │ ├── theme/ │ │ │ ├── DarkTheme.ts │ │ │ └── LightTheme.ts │ │ ├── types/ │ │ │ ├── confirm.d.ts │ │ │ ├── desktop-bridge.d.ts │ │ │ ├── themeTypes/ │ │ │ │ └── ThemeType.ts │ │ │ ├── vue3-print-nb.d.ts │ │ │ └── vue_tabler_icon.d.ts │ │ ├── utils/ │ │ │ ├── chatConfigBinding.ts │ │ │ ├── confirmDialog.ts │ │ │ ├── desktopRuntime.ts │ │ │ ├── errorUtils.js │ │ │ ├── hashRouteTabs.mjs │ │ │ ├── inputValue.ts │ │ │ ├── platformUtils.js │ │ │ ├── pluginSearch.js │ │ │ ├── providerUtils.js │ │ │ ├── restartAstrBot.ts │ │ │ ├── routerReadiness.mjs │ │ │ ├── sidebarCustomization.js │ │ │ └── toast.js │ │ └── views/ │ │ ├── AboutPage.vue │ │ ├── AlkaidPage.vue │ │ ├── ChatBoxPage.vue │ │ ├── ChatPage.vue │ │ ├── ConfigPage.vue │ │ ├── ConsolePage.vue │ │ ├── ConversationPage.vue │ │ ├── CronJobPage.vue │ │ ├── ExtensionPage.vue │ │ ├── PersonaPage.vue │ │ ├── PlatformPage.vue │ │ ├── ProviderPage.vue │ │ ├── SessionManagementPage.vue │ │ ├── Settings.vue │ │ ├── SubAgentPage.vue │ │ ├── TracePage.vue │ │ ├── WelcomePage.vue │ │ ├── alkaid/ │ │ │ ├── KnowledgeBase.vue │ │ │ ├── LongTermMemory.vue │ │ │ └── Other.vue │ │ ├── authentication/ │ │ │ ├── auth/ │ │ │ │ └── LoginPage.vue │ │ │ └── authForms/ │ │ │ └── AuthLogin.vue │ │ ├── dashboards/ │ │ │ └── default/ │ │ │ ├── DefaultDashboard.vue │ │ │ └── components/ │ │ │ ├── MemoryUsage.vue │ │ │ ├── MessageStat.vue │ │ │ ├── OnlinePlatform.vue │ │ │ ├── OnlineTime.vue │ │ │ ├── PlatformStat.vue │ │ │ ├── RunningTime.vue │ │ │ └── TotalMessage.vue │ │ ├── extension/ │ │ │ ├── InstalledPluginsTab.vue │ │ │ ├── MarketPluginsTab.vue │ │ │ └── useExtensionPage.js │ │ ├── knowledge-base/ │ │ │ ├── DocumentDetail.vue │ │ │ ├── KBDetail.vue │ │ │ ├── KBList.vue │ │ │ ├── components/ │ │ │ │ ├── DocumentsTab.vue │ │ │ │ ├── RetrievalTab.vue │ │ │ │ ├── SettingsTab.vue │ │ │ │ └── TavilyKeyDialog.vue │ │ │ └── index.vue │ │ └── persona/ │ │ ├── CreateFolderDialog.vue │ │ ├── FolderBreadcrumb.vue │ │ ├── FolderCard.vue │ │ ├── FolderTree.vue │ │ ├── FolderTreeNode.vue │ │ ├── MoveTargetNode.vue │ │ ├── MoveToFolderDialog.vue │ │ ├── PersonaCard.vue │ │ ├── PersonaManager.vue │ │ └── index.ts │ ├── tests/ │ │ ├── hashRouteTabs.test.mjs │ │ ├── routerReadiness.test.mjs │ │ └── subsetMdiFont.test.mjs │ ├── tsconfig.json │ ├── tsconfig.vite-config.json │ └── vite.config.ts ├── docs/ │ ├── .gitignore │ ├── .vitepress/ │ │ ├── config/ │ │ │ └── head.ts │ │ ├── config.mjs │ │ └── theme/ │ │ ├── components/ │ │ │ ├── ArticleShare.vue │ │ │ ├── HomeFeaturesAfter.vue │ │ │ ├── Layout.vue │ │ │ ├── NotFound.vue │ │ │ └── SectionTabs.vue │ │ ├── index.js │ │ └── styles/ │ │ ├── custom-block.css │ │ ├── font.css │ │ └── style.css │ ├── README.md │ ├── en/ │ │ ├── community.md │ │ ├── config/ │ │ │ └── model-config.md │ │ ├── deploy/ │ │ │ ├── astrbot/ │ │ │ │ ├── 1panel.md │ │ │ │ ├── btpanel.md │ │ │ │ ├── casaos.md │ │ │ │ ├── cli.md │ │ │ │ ├── community-deployment.md │ │ │ │ ├── compshare.md │ │ │ │ ├── docker.md │ │ │ │ ├── kubernetes.md │ │ │ │ ├── launcher.md │ │ │ │ ├── other-deployments.md │ │ │ │ ├── package.md │ │ │ │ └── sys-pm.md │ │ │ └── when-deployed.md │ │ ├── dev/ │ │ │ ├── astrbot-config.md │ │ │ ├── openapi.md │ │ │ ├── plugin-platform-adapter.md │ │ │ ├── plugin.md │ │ │ └── star/ │ │ │ ├── guides/ │ │ │ │ ├── ai.md │ │ │ │ ├── env.md │ │ │ │ ├── html-to-pic.md │ │ │ │ ├── listen-message-event.md │ │ │ │ ├── plugin-config.md │ │ │ │ ├── send-message.md │ │ │ │ ├── session-control.md │ │ │ │ ├── simple.md │ │ │ │ └── storage.md │ │ │ ├── plugin-new.md │ │ │ └── plugin-publish.md │ │ ├── faq.md │ │ ├── index.md │ │ ├── ospp/ │ │ │ └── 2025.md │ │ ├── others/ │ │ │ └── self-host-t2i.md │ │ ├── platform/ │ │ │ ├── aiocqhttp.md │ │ │ ├── dingtalk.md │ │ │ ├── discord.md │ │ │ ├── kook.md │ │ │ ├── lark.md │ │ │ ├── line.md │ │ │ ├── matrix.md │ │ │ ├── misskey.md │ │ │ ├── qqofficial/ │ │ │ │ ├── webhook.md │ │ │ │ └── websockets.md │ │ │ ├── qqofficial.md │ │ │ ├── satori/ │ │ │ │ ├── guide.md │ │ │ │ └── server-satori.md │ │ │ ├── slack.md │ │ │ ├── start.md │ │ │ ├── telegram.md │ │ │ ├── vocechat.md │ │ │ ├── wecom.md │ │ │ ├── wecom_ai_bot.md │ │ │ └── weixin-official-account.md │ │ ├── providers/ │ │ │ ├── 302ai.md │ │ │ ├── agent-runners/ │ │ │ │ ├── astrbot-agent-runner.md │ │ │ │ ├── coze.md │ │ │ │ ├── dashscope.md │ │ │ │ ├── deerflow.md │ │ │ │ └── dify.md │ │ │ ├── agent-runners.md │ │ │ ├── aihubmix.md │ │ │ ├── coze.md │ │ │ ├── dashscope.md │ │ │ ├── dify.md │ │ │ ├── llm.md │ │ │ ├── newapi.md │ │ │ ├── ppio.md │ │ │ ├── provider-lmstudio.md │ │ │ ├── provider-ollama.md │ │ │ ├── siliconflow.md │ │ │ ├── start.md │ │ │ └── tokenpony.md │ │ ├── use/ │ │ │ ├── agent-runner.md │ │ │ ├── astrbot-agent-sandbox.md │ │ │ ├── astrbot-sandbox.md │ │ │ ├── code-interpreter.md │ │ │ ├── command.md │ │ │ ├── context-compress.md │ │ │ ├── custom-rules.md │ │ │ ├── function-calling.md │ │ │ ├── knowledge-base.md │ │ │ ├── mcp.md │ │ │ ├── plugin.md │ │ │ ├── proactive-agent.md │ │ │ ├── skills.md │ │ │ ├── subagent.md │ │ │ ├── unified-webhook.md │ │ │ ├── websearch.md │ │ │ └── webui.md │ │ └── what-is-astrbot.md │ ├── package.json │ ├── public/ │ │ ├── openapi.json │ │ └── scalar.html │ ├── scripts/ │ │ ├── sync_docs_to_wiki.py │ │ ├── upload-doc-images-to-r2.sh │ │ ├── upload_doc_images_to_r2.py │ │ └── usage.md │ ├── tests/ │ │ └── test_sync_docs_to_wiki.py │ ├── vercel.json │ └── zh/ │ ├── community.md │ ├── deploy/ │ │ ├── astrbot/ │ │ │ ├── 1panel.md │ │ │ ├── btpanel.md │ │ │ ├── casaos.md │ │ │ ├── cli.md │ │ │ ├── community-deployment.md │ │ │ ├── compshare.md │ │ │ ├── desktop.md │ │ │ ├── docker.md │ │ │ ├── kubernetes.md │ │ │ ├── launcher.md │ │ │ ├── other-deployments.md │ │ │ ├── package.md │ │ │ ├── rainyun.md │ │ │ └── sys-pm.md │ │ └── when-deployed.md │ ├── dev/ │ │ ├── astrbot-config.md │ │ ├── openapi.md │ │ ├── plugin-platform-adapter.md │ │ ├── plugin.md │ │ └── star/ │ │ ├── guides/ │ │ │ ├── ai.md │ │ │ ├── env.md │ │ │ ├── html-to-pic.md │ │ │ ├── listen-message-event.md │ │ │ ├── other.md │ │ │ ├── plugin-config.md │ │ │ ├── send-message.md │ │ │ ├── session-control.md │ │ │ ├── simple.md │ │ │ └── storage.md │ │ ├── plugin-new.md │ │ ├── plugin-publish.md │ │ └── plugin.md │ ├── faq.md │ ├── index.md │ ├── ospp/ │ │ └── 2025.md │ ├── others/ │ │ ├── github-proxy.md │ │ ├── ipv6.md │ │ └── self-host-t2i.md │ ├── platform/ │ │ ├── aiocqhttp.md │ │ ├── dingtalk.md │ │ ├── discord.md │ │ ├── kook.md │ │ ├── lark.md │ │ ├── line.md │ │ ├── matrix.md │ │ ├── misskey.md │ │ ├── qqofficial/ │ │ │ ├── webhook.md │ │ │ └── websockets.md │ │ ├── qqofficial.md │ │ ├── satori/ │ │ │ ├── guide.md │ │ │ └── server-satori.md │ │ ├── slack.md │ │ ├── start.md │ │ ├── telegram.md │ │ ├── vocechat.md │ │ ├── wecom.md │ │ ├── wecom_ai_bot.md │ │ └── weixin-official-account.md │ ├── providers/ │ │ ├── 302ai.md │ │ ├── agent-runners/ │ │ │ ├── astrbot-agent-runner.md │ │ │ ├── coze.md │ │ │ ├── dashscope.md │ │ │ ├── deerflow.md │ │ │ └── dify.md │ │ ├── agent-runners.md │ │ ├── aihubmix.md │ │ ├── coze.md │ │ ├── dashscope.md │ │ ├── dify.md │ │ ├── llm.md │ │ ├── newapi.md │ │ ├── ppio.md │ │ ├── provider-lmstudio.md │ │ ├── provider-ollama.md │ │ ├── siliconflow.md │ │ ├── start.md │ │ └── tokenpony.md │ ├── use/ │ │ ├── agent-runner.md │ │ ├── astrbot-agent-sandbox.md │ │ ├── code-interpreter.md │ │ ├── command.md │ │ ├── context-compress.md │ │ ├── custom-rules.md │ │ ├── function-calling.md │ │ ├── knowledge-base-old.md │ │ ├── knowledge-base.md │ │ ├── mcp.md │ │ ├── plugin.md │ │ ├── proactive-agent.md │ │ ├── skills.md │ │ ├── subagent.md │ │ ├── unified-webhook.md │ │ ├── websearch.md │ │ └── webui.md │ └── what-is-astrbot.md ├── k8s/ │ ├── astrbot/ │ │ ├── 00-namespace.yaml │ │ ├── 01-pvc.yaml │ │ ├── 02-deployment.yaml │ │ ├── 03-service-nodeport.yaml │ │ └── 04-service-loadbalancer.yaml │ └── astrbot_with_napcat/ │ ├── 00-namespace.yaml │ ├── 01-pvc.yaml │ ├── 02-deployment.yaml │ ├── 03-service-nodeport.yaml │ └── 04-service-loadbalancer.yaml ├── main.py ├── openapi.json ├── openspec/ │ └── config.yaml ├── pyproject.toml ├── requirements.txt ├── runtime_bootstrap.py ├── scripts/ │ ├── astrbot.service │ ├── hatch_build.py │ ├── pr_test_env.sh │ └── start-with-neo.sh ├── tests/ │ ├── agent/ │ │ ├── test_context_manager.py │ │ ├── test_token_counter.py │ │ └── test_truncator.py │ ├── conftest.py │ ├── fixtures/ │ │ ├── __init__.py │ │ ├── configs/ │ │ │ └── test_cmd_config.json │ │ ├── helpers.py │ │ ├── messages/ │ │ │ └── test_messages.json │ │ ├── mocks/ │ │ │ ├── __init__.py │ │ │ ├── aiocqhttp.py │ │ │ ├── discord.py │ │ │ └── telegram.py │ │ └── plugins/ │ │ ├── fixture_plugin.py │ │ └── metadata.yaml │ ├── test_anthropic_kimi_code_provider.py │ ├── test_api_key_open_api.py │ ├── test_backup.py │ ├── test_chat_route.py │ ├── test_computer_config.py │ ├── test_computer_skill_sync.py │ ├── test_dashboard.py │ ├── test_kb_import.py │ ├── test_kook/ │ │ ├── .gitignore │ │ ├── data/ │ │ │ ├── kook_card_data.json │ │ │ ├── kook_ws_event_group_message.json │ │ │ ├── kook_ws_event_hello.json │ │ │ ├── kook_ws_event_message_with_card_1.json │ │ │ ├── kook_ws_event_message_with_card_2.json │ │ │ ├── kook_ws_event_ping.json │ │ │ ├── kook_ws_event_pong.json │ │ │ ├── kook_ws_event_private_message.json │ │ │ ├── kook_ws_event_private_system_message.json │ │ │ ├── kook_ws_event_reconnect_err.json │ │ │ ├── kook_ws_event_resume.json │ │ │ └── kook_ws_event_resume_ack.json │ │ ├── shared.py │ │ ├── test_kook_event.py │ │ └── test_kook_types.py │ ├── test_local_shell_component.py │ ├── test_main.py │ ├── test_neo_skill_sync.py │ ├── test_neo_skill_tools.py │ ├── test_openai_source.py │ ├── test_pip_helper_modules.py │ ├── test_pip_installer.py │ ├── test_plugin_manager.py │ ├── test_profile_aware_tools.py │ ├── test_quoted_message_parser.py │ ├── test_runtime_env.py │ ├── test_security_fixes.py │ ├── test_skill_manager_sandbox_cache.py │ ├── test_skill_metadata_enrichment.py │ ├── test_smoke.py │ ├── test_temp_dir_cleaner.py │ ├── test_tool_loop_agent_runner.py │ └── unit/ │ ├── test_aiocqhttp_poke.py │ ├── test_astr_agent_tool_exec.py │ ├── test_astr_main_agent.py │ ├── test_astr_message_event.py │ ├── test_astrbot_message.py │ ├── test_computer.py │ ├── test_config.py │ ├── test_core_lifecycle.py │ ├── test_cron_manager.py │ ├── test_cron_tools.py │ ├── test_event_bus.py │ ├── test_python_tools.py │ ├── test_session_lock.py │ ├── test_star_base.py │ └── test_subagent_orchestrator.py └── typings/ └── faiss/ └── __init__.pyi