Undefined-bot 3.18.10__tar.gz → 3.19.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/CHANGELOG.md +13 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/PKG-INFO +1 -1
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/pyproject.toml +1 -1
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/__init__.py +1 -1
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/paths.py +1 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/app.py +22 -7
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/core.py +202 -24
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/routes/_auth.py +31 -6
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/routes/_shared.py +0 -1
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/api.js +45 -6
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/state.js +23 -18
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/.gitignore +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/ARCHITECTURE.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/LICENSE +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/config/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/config/mcp.json.example +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/config.toml.example +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/img/undefined-9527.png +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/img/xlwy.jpg +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/IMPORTANT/each.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/agent_self_intro.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/analyze_multimodal.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/describe_image.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/describe_meme_image.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/generate_title.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/historian_profile_merge.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/historian_rewrite.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/image_gen_moderation.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/injection_detector.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/injection_response_agent.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/judge_meme_image.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/merge_message_summaries.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/merge_summaries.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/message_summary.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/naga_message_moderation.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/stats_analysis.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/summarize.txt +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/undefined.xml +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/res/prompts/undefined_nagaagent.xml +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/__main__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/client/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/client/ask_loop.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/client/queue.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/client/setup.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/crawl4ai_support.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/http.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/llm/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/llm/requester.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/llm/retry.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/llm/sanitize.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/llm/streaming.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/llm/thinking.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/llm/types.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/model_selector.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/multimodal/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/multimodal/analyzer.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/multimodal/constants.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/multimodal/detection.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/multimodal/parsing.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/parsing.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/prompts/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/prompts/builder.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/prompts/cognitive.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/prompts/constants.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/prompts/current_input.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/prompts/file_includes.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/prompts/system_context.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/prompts/system_info.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/queue_budget.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/retrieval.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/summaries.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/tokens.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/tool_search.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/tooling.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/transports/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/transports/anthropic_transport.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/transports/openai_transport.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/ai/transports/replay.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/_context.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/_helpers.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/_naga_state.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/_openapi.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/_probes.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/app.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/naga_store.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/automations.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/chat.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/cognitive.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/commands.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/health.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/memes.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/memory.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/naga/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/naga/auth.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/naga/bind.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/naga/send.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/naga/unbind.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/onebot_files.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/schedules.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/system.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/tools.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/routes/weixin.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/api/webchat_store.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/arxiv/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/arxiv/client.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/arxiv/downloader.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/arxiv/models.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/arxiv/parser.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/arxiv/sender.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/attachments/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/attachments/forward_snapshot.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/attachments/models.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/attachments/registry.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/attachments/remote.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/attachments/render.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/attachments/segments.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/address.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/catalog.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/clock.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/constants.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/engine.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/extract.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/logutil.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/match.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/mentions.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/migrate.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/runner.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/service.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/short.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/storage.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/template.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/triggers.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/automations/validate.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/api_client.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/danmaku.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/download_core.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/downloader.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/errors.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/format.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/models.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/opus_parser.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/opus_render.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/opus_sender.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/parser.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/sender.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/wbi.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/bilibili/wbi_request.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/changelog.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/chroma_scheduler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/historian/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/historian/helpers.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/historian/scheduling.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/historian/tools.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/historian/worker.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/job_queue.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/profile_storage.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/service/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/service/helpers.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/service/service.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/vector_store.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/cognitive/vector_store_compat.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/admin.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/api_modes.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/build_config.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/coercers.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/config_class.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/domain_parsers.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/env_registry.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/hot_reload.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/load_sections/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/load_sections/access.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/load_sections/core.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/load_sections/domains.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/load_sections/finalize.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/load_sections/history_skills.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/load_sections/integrations.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/load_sections/knowledge.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/load_sections/logging_tools.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/load_sections/models.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/load_sections/network.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/loader.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/manager.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/model_parsers.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/models.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/naga_policy.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/onebot.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/agent.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/chat.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/embedding.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/grok.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/helpers.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/historian.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/image.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/naga.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/pool.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/security.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/summary.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/parsers/vision.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/resolvers.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/search.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/toml_io.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/config/webui_settings.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/context.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/context_resource_registry.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/__main__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/catalog.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/cli.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/commands.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/config_patch.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/docker_cli.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/generate.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/images.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/nagaagent.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/runner.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/state.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/templates/.dockerignore +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/templates/Dockerfile.bot +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/templates/compose.base.yaml +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/templates/compose.bot.yaml +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/templates/compose.firecrawl.yaml +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/templates/compose.lxmusic2api.yaml +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/templates/compose.napcat.yaml +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/templates/compose.searxng.yaml +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/templates/lxmusic2api.config.toml +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/templates/napcat.ws.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/deploy/templates/searxng.settings.yml +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/douyin/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/douyin/client.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/douyin/downloader.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/douyin/models.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/douyin/parser.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/douyin/sender.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/end_summary_storage.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/faq.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/github/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/github/client.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/github/models.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/github/parser.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/github/sender.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/handlers/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/handlers/auto_extract.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/handlers/message_flow.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/handlers/poke.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/handlers/repeat.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/injection_response_agent.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/jm/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/jm/client.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/jm/downloader.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/jm/parser.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/jm/searcher.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/jm/sender.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/knowledge/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/knowledge/chunker.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/knowledge/embedder.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/knowledge/manager.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/knowledge/reranker.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/knowledge/runtime.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/knowledge/store.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/main.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/mcp/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/mcp/registry.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/memes/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/memes/_image_utils.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/memes/ingest.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/memes/models.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/memes/search.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/memes/service.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/memes/store.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/memes/vector_store.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/memes/worker.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/memory.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/onebot/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/onebot/client.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/onebot/file_errors.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/onebot/file_references.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/onebot/file_store.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/onebot/file_transport.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/onebot/message.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/py.typed +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/rate_limit.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/render.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/bugfix_command.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/command.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/commands/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/commands/catalog.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/commands/context.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/commands/registry.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/coordinator/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/coordinator/background.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/coordinator/batching.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/coordinator/group.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/coordinator/message_ids.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/coordinator/private.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/message_batcher/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/message_batcher/scheduler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/message_batcher/state.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/message_summary_fetch.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/model_pool.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/queue_manager.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/security.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/services/stats_command.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/agent_tool_registry.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/docker_utils.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/intro.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/mcp.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/prompt.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/copy/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/copy/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/delete/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/delete/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/diff/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/diff/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/end/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/end/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/glob/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/glob/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/grep/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/grep/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/init_docker/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/init_docker/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/read/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/read/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/run_bash_command/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/run_bash_command/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/todo/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/todo/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/tree/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/tree/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/write/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/code_delivery_agent/tools/write/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/intro.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/prompt.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/tools/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/tools/ai_draw_one/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/tools/ai_draw_one/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/tools/horoscope/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/tools/horoscope/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/tools/minecraft_skin/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/tools/minecraft_skin/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/tools/renjian/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/tools/renjian/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/tools/wenchang_dijun/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/entertainment_agent/tools/wenchang_dijun/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/intro.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/prompt.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/analyze_code/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/analyze_code/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/analyze_multimodal/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/analyze_multimodal/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/cleanup_temp/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/cleanup_temp/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/describe_pdf_page/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/describe_pdf_page/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/detect_file_type/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/detect_file_type/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/download_file/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/download_file/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/extract_archive/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/extract_archive/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/extract_docx/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/extract_docx/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/extract_pdf/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/extract_pdf/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/extract_pptx/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/extract_pptx/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/extract_xlsx/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/extract_xlsx/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/read_text_file/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/file_analysis_agent/tools/read_text_file/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/intro.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/prompt.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/arxiv_search/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/arxiv_search/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/baiduhot/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/baiduhot/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/base64/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/base64/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/bilibili_search/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/bilibili_search/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/bilibili_user_info/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/bilibili_user_info/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/douyinhot/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/douyinhot/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/gold_price/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/gold_price/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/hash/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/hash/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/history/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/history/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/jm_search/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/jm_search/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/net_check/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/net_check/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/qq_level_query/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/qq_level_query/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/speed/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/speed/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/tcping/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/tcping/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/weather_query/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/weather_query/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/weibohot/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/weibohot/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/whois/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/info_agent/tools/whois/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/intro_generator.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/intro_utils.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/intro.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/mcp.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/prompt.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/tools/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/tools/glob/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/tools/glob/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/tools/list_directory/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/tools/list_directory/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/tools/read_file/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/tools/read_file/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/tools/read_naga_intro/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/tools/read_naga_intro/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/tools/search_file_content/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/naga_code_analysis_agent/tools/search_file_content/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/runner/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/runner/context.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/runner/loop.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/runner/tools.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/runner/webchat_utils.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/summary_agent/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/summary_agent/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/summary_agent/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/summary_agent/intro.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/summary_agent/prompt.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/summary_agent/tools/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/summary_agent/tools/fetch_messages/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/summary_agent/tools/fetch_messages/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/intro.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/prompt.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/tools/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/tools/_shared.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/tools/glob/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/tools/glob/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/tools/list_directory/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/tools/list_directory/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/tools/read_file/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/tools/read_file/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/tools/search_file_content/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/undefined_self_code_agent/tools/search_file_content/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/callable.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/intro.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/mcp.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/prompt.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/tools/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/tools/crawl_webpage/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/tools/crawl_webpage/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/tools/firecrawl_search/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/tools/firecrawl_search/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/tools/grok_search/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/tools/grok_search/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/tools/web_search/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/agents/web_agent/tools/web_search/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/anthropic_skills/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/anthropic_skills/loader.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/admin/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/admin/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/admin/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/bugfix/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/bugfix/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/bugfix/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/changelog/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/changelog/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/changelog/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/copyright/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/copyright/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/copyright/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/faq/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/faq/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/faq/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/feedback/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/feedback/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/feedback/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/help/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/help/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/help/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/naga/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/naga/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/naga/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/naga/policy.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/profile/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/profile/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/profile/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/stats/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/stats/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/stats/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/summary/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/summary/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/summary/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/version/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/version/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/commands/version/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/http_client.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/http_config.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/arxiv/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/arxiv/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/bilibili/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/bilibili/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/bilibili_opus/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/bilibili_opus/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/context.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/douyin/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/douyin/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/github/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/github/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/jm/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/jm/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/models.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/pipelines/registry.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/registry.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/shared.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/arxiv_paper/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/arxiv_paper/callable.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/arxiv_paper/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/arxiv_paper/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/bilibili_opus/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/bilibili_opus/callable.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/bilibili_opus/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/bilibili_opus/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/bilibili_video/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/bilibili_video/callable.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/bilibili_video/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/bilibili_video/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/calculator/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/calculator/callable.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/calculator/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/calculator/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/changelog_query/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/changelog_query/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/changelog_query/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/douyin_video/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/douyin_video/callable.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/douyin_video/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/douyin_video/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/end/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/end/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/end/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/fetch_image_uid/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/fetch_image_uid/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/fetch_image_uid/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/get_current_time/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/get_current_time/callable.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/get_current_time/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/get_current_time/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/get_picture/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/get_picture/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/get_picture/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/get_user_info/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/get_user_info/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/get_user_info/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/jm_book/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/jm_book/callable.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/jm_book/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/jm_book/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/knowledge_list/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/knowledge_list/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/knowledge_list/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/knowledge_semantic_search/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/knowledge_semantic_search/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/knowledge_semantic_search/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/knowledge_text_search/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/knowledge_text_search/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/knowledge_text_search/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/python_interpreter/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/python_interpreter/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/python_interpreter/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/qq_like/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/qq_like/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/qq_like/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/task_progress/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/task_progress/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/tools/task_progress/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/attachments/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/attachments/get_uid_by_url/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/attachments/get_uid_by_url/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/attachments/get_url_by_uid/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/attachments/get_url_by_uid/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/_runtime.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/create/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/create/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/delete/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/delete/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/get/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/get/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/list/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/list/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/set_enabled/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/set_enabled/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/update/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/automation/update/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/cognitive/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/cognitive/get_profile/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/cognitive/get_profile/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/cognitive/search_events/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/cognitive/search_events/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/cognitive/search_profiles/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/cognitive/search_profiles/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/commands/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/commands/get/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/commands/get/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/commands/search/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/commands/search/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/contacts/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/contacts/query_friends/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/contacts/query_friends/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/contacts/query_groups/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/contacts/query_groups/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/find_member/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/find_member/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_avatar/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_avatar/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_files/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_files/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_honor_info/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_honor_info/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_member_info/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_member_info/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_member_list/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_member_list/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_member_title/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group/get_member_title/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/activity_trend/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/activity_trend/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/filter_members/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/filter_members/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/inactive_risk/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/inactive_risk/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/join_statistics/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/join_statistics/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/level_distribution/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/level_distribution/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/member_activity/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/member_activity/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/member_messages/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/member_messages/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/member_structure/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/member_structure/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/message_mix/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/message_mix/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/new_member_activity/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/new_member_activity/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/rank_members/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/group_analysis/rank_members/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/mcp/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/mcp/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memes/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memes/search_memes/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memes/search_memes/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memes/send_meme_by_uid/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memes/send_meme_by_uid/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memory/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memory/add/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memory/add/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memory/delete/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memory/delete/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memory/list/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memory/list/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memory/update/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/memory/update/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/context_utils.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/get_forward_msg/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/get_forward_msg/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/get_messages_by_time/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/get_messages_by_time/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/get_recent_messages/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/get_recent_messages/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/list_emojis/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/list_emojis/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/lookup_emoji_id/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/lookup_emoji_id/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/react_message_emoji/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/react_message_emoji/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_group_sign/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_group_sign/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_message/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_message/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_poke/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_poke/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_private_message/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_private_message/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_text_file/callable.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_text_file/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_text_file/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_url_file/callable.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_url_file/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_url_file/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_voice/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/messages/send_voice/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/_client.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/_constants.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/_tools.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/_track_refs.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/browse_playlists/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/browse_playlists/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/browse_rankings/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/browse_rankings/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/find_song_matches/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/find_song_matches/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/get_audio/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/get_audio/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/get_comments/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/get_comments/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/get_cover/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/get_cover/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/get_hot_search/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/get_hot_search/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/get_lyrics/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/get_lyrics/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/search_playlists/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/search_playlists/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/search_songs/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/music/search_songs/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/notices/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/notices/get/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/notices/get/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/notices/list/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/notices/list/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/notices/stats/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/notices/stats/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/render/README.md +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/render/layout.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/render/render_html/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/render/render_html/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/render/render_latex/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/render/render_latex/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/render/render_markdown/config.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/skills/toolsets/render/render_markdown/handler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/token_usage_storage.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/cache.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/coerce.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/common.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/cors.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/easter_egg_calls.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/fake_at.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/file_lock.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/group_metrics.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/history.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/http_download.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/io.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/logging.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/member_utils.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/message_reply.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/message_targets.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/message_turn.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/message_utils.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/qq_emoji.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/queue_intervals.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/recent_messages.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/render_cache.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/request_params.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/resources.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/scheduler.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/self_update.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/sender.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/sender_helpers.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/time_utils.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/tool_calls.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/utils/xml.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/__main__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/routes/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/routes/_bot.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/routes/_config.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/routes/_index.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/routes/_logs.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/routes/_memes.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/routes/_runtime.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/routes/_system.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/routes/_weixin.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/css/.stylelintrc.json +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/css/app.css +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/css/base.css +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/css/components.css +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/css/highlight-github.min.css +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/css/landing.css +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/css/responsive.css +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/css/style.css +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/css/variables.css +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/css/workflow.css +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/favicon.svg +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/auth.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/bot.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/config-form.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/i18n.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/log-view.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/logs.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/main.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/memes.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/runtime.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/schedules.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/ui.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/vendor/highlight.min.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/vendor/highlightjs.LICENSE +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/vendor/marked.min.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/weixin.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/workflow-canvas.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/workflow-graph.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/static/js/workflow-inspector.js +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/templates/index.html +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/utils/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/utils/comment.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/utils/config_io.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/utils/config_sync.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/webui/utils/toml_render.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/weixin/__init__.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/weixin/audio.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/weixin/models.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/weixin/service.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/weixin/store.py +0 -0
- {undefined_bot-3.18.10 → undefined_bot-3.19.0}/src/Undefined/weixin/transport.py +0 -0
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
## v3.19.0 控制台登录态持久化
|
|
2
|
+
|
|
3
|
+
本版本让 WebUI 控制台的登录态在进程重启后继续有效,并把登录有效期从 8 小时延长到 30 天;活跃使用的会话会自动续期,浏览器关闭重开也不再要求重新登录。
|
|
4
|
+
|
|
5
|
+
- 会话落盘:服务端会话表写入 `data/cache/webui_sessions.json`(权限 0600),启动时自动恢复;过期条目在加载和写盘时清理,文件损坏只告警,不影响控制台启动。
|
|
6
|
+
- 有效期延长:session 与 refresh token 从 8 小时延长到 30 天,access token 保持 15 分钟并由前端自动刷新;session 剩余不足一半时滑动续期,持续使用不会掉线。
|
|
7
|
+
- 前端存储:WebUI 令牌从 `sessionStorage` 改为 `localStorage`,浏览器或控制台重启后仍然保留;自动迁移旧版本遗留的令牌,登出时一并清理。
|
|
8
|
+
- Cookie 同步:`undefined_webui` 与 `undefined_webui_token` 的 `max_age` 均设为 30 天;刷新轮换只重置 `undefined_webui_token`,`undefined_webui` 保持登录时的 30 天期限。
|
|
9
|
+
- 刷新安全:refresh token 轮换改为加锁原子操作,旧 token 立即失效;会话文件只保存密码指纹,修改管理密码(含直接编辑 `config.toml` 后重启)会作废旧登录态。
|
|
10
|
+
- 测试覆盖:新增会话持久化、滑动续期、密码变更失效与重启恢复测试。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
1
14
|
## v3.18.10 群聊出错静默处理
|
|
2
15
|
|
|
3
16
|
本版本新增群聊出错时的发言边界:bot 自行发起且未被要求的失败直接静默结束,用户明确要求的失败只回一句简短状态,不再主动认领、道歉或解释错误详情;同时把规则提升为与说话风格同级的 P1 顶层小节,并在多处同步重申。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: Undefined-bot
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.19.0
|
|
4
4
|
Summary: QQ bot platform with cognitive memory architecture and multi-agent Skills, via OneBot V11.
|
|
5
5
|
Project-URL: Repository, https://github.com/69gg/Undefined
|
|
6
6
|
Project-URL: Issues, https://github.com/69gg/Undefined/issues
|
|
@@ -24,7 +24,7 @@ if TYPE_CHECKING:
|
|
|
24
24
|
from .skills.registry import BaseRegistry as BaseRegistry
|
|
25
25
|
from .skills.tools import ToolRegistry as ToolRegistry
|
|
26
26
|
|
|
27
|
-
__version__: str = "3.
|
|
27
|
+
__version__: str = "3.19.0"
|
|
28
28
|
|
|
29
29
|
# symbol -> (module_path, attribute_name);首次访问时才 importlib 加载
|
|
30
30
|
_LAZY_IMPORTS: dict[str, tuple[str, str]] = {
|
|
@@ -18,6 +18,7 @@ DOWNLOAD_CACHE_DIR: Path = CACHE_DIR / "downloads"
|
|
|
18
18
|
TEXT_FILE_CACHE_DIR: Path = CACHE_DIR / "text_files"
|
|
19
19
|
URL_FILE_CACHE_DIR: Path = CACHE_DIR / "url_files"
|
|
20
20
|
WEBUI_FILE_CACHE_DIR: Path = CACHE_DIR / "webui_files"
|
|
21
|
+
WEBUI_SESSIONS_FILE: Path = CACHE_DIR / "webui_sessions.json"
|
|
21
22
|
ATTACHMENT_REGISTRY_FILE: Path = DATA_DIR / "attachment_registry.json"
|
|
22
23
|
WEBCHAT_DIR: Path = DATA_DIR / "webchat"
|
|
23
24
|
WEBCHAT_CONVERSATIONS_DIR: Path = WEBCHAT_DIR / "conversations"
|
|
@@ -17,6 +17,7 @@ from Undefined.config import (
|
|
|
17
17
|
)
|
|
18
18
|
from Undefined.utils.cors import is_allowed_cors_origin, normalize_origin
|
|
19
19
|
from Undefined.utils import io as async_io
|
|
20
|
+
from Undefined.utils.paths import WEBUI_SESSIONS_FILE
|
|
20
21
|
from Undefined.utils.self_update import resolve_repo_root
|
|
21
22
|
from .core import BotProcessController, SessionStore
|
|
22
23
|
from .routes import routes
|
|
@@ -296,12 +297,14 @@ def create_app(*, redirect_to_config_once: bool = False) -> web.Application:
|
|
|
296
297
|
middlewares=[cors_middleware, gzip_middleware, security_headers_middleware]
|
|
297
298
|
)
|
|
298
299
|
|
|
299
|
-
# 初始化核心组件
|
|
300
|
-
app[SESSION_STORE_APP_KEY] = SessionStore()
|
|
301
|
-
|
|
302
300
|
# 配置 WebUI 设置热重载
|
|
303
301
|
config_manager = get_config_manager()
|
|
304
|
-
|
|
302
|
+
settings = load_webui_settings()
|
|
303
|
+
app[SETTINGS_APP_KEY] = settings
|
|
304
|
+
# 会话落盘:控制台重启后浏览器无需重新登录;密码变更时旧会话自动失效。
|
|
305
|
+
app[SESSION_STORE_APP_KEY] = SessionStore(
|
|
306
|
+
storage_path=WEBUI_SESSIONS_FILE, password=settings.password
|
|
307
|
+
)
|
|
305
308
|
app[BOT_APP_KEY] = BotProcessController(
|
|
306
309
|
stop_timeout_getter=lambda: app[SETTINGS_APP_KEY].stop_timeout_seconds
|
|
307
310
|
)
|
|
@@ -323,9 +326,21 @@ def create_app(*, redirect_to_config_once: bool = False) -> web.Application:
|
|
|
323
326
|
):
|
|
324
327
|
logger.info("[WebUI] 检测到 WebUI 配置变更,正在热重载设置...")
|
|
325
328
|
# 本次快照已成功读取;后续外部写入不能覆盖已验证的设置。
|
|
326
|
-
app[SETTINGS_APP_KEY]
|
|
327
|
-
|
|
328
|
-
|
|
329
|
+
previous = app[SETTINGS_APP_KEY]
|
|
330
|
+
updated = WebUISettings.from_config(config, config_exists=True)
|
|
331
|
+
if updated.password != previous.password:
|
|
332
|
+
try:
|
|
333
|
+
# 先持久化作废旧会话,再启用新密码,避免旧令牌在新密码下仍可用。
|
|
334
|
+
app[SESSION_STORE_APP_KEY].set_password(updated.password)
|
|
335
|
+
except Exception:
|
|
336
|
+
# 内存中的旧会话已作废(fail closed);保留旧设置,
|
|
337
|
+
# 下一次配置变更会重试持久化,避免把新密码当作已完全生效。
|
|
338
|
+
logger.warning(
|
|
339
|
+
"[WebUI] 密码变更后清理旧会话失败,暂不启用新密码",
|
|
340
|
+
exc_info=True,
|
|
341
|
+
)
|
|
342
|
+
return
|
|
343
|
+
app[SETTINGS_APP_KEY] = updated
|
|
329
344
|
|
|
330
345
|
config_manager.subscribe(_on_config_change)
|
|
331
346
|
|
|
@@ -1,22 +1,38 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
from collections.abc import Callable
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
+
import hashlib
|
|
5
|
+
import json
|
|
4
6
|
import logging
|
|
5
7
|
import os
|
|
8
|
+
from pathlib import Path
|
|
6
9
|
import signal
|
|
7
10
|
import subprocess
|
|
8
11
|
import sys
|
|
12
|
+
import threading
|
|
9
13
|
import time
|
|
10
14
|
import secrets
|
|
11
15
|
from typing import Any
|
|
12
16
|
from Undefined.config.webui_settings import DEFAULT_WEBUI_STOP_TIMEOUT_SECONDS
|
|
13
|
-
from Undefined.utils.io import run_cancellation_safe
|
|
17
|
+
from Undefined.utils.io import run_cancellation_safe, write_json_sync
|
|
14
18
|
|
|
15
19
|
logger = logging.getLogger(__name__)
|
|
16
20
|
|
|
17
|
-
|
|
21
|
+
#: 登录态有效期。控制台属于本地自托管面板,长有效期配合活跃滑动续期,
|
|
22
|
+
#: 让长期使用的浏览器不必反复登录。
|
|
23
|
+
SESSION_TTL_SECONDS = 30 * 24 * 60 * 60
|
|
18
24
|
ACCESS_TOKEN_TTL_SECONDS = 15 * 60
|
|
19
|
-
REFRESH_TOKEN_TTL_SECONDS =
|
|
25
|
+
REFRESH_TOKEN_TTL_SECONDS = 30 * 24 * 60 * 60
|
|
26
|
+
SESSION_FILE_VERSION = 1
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _password_fingerprint(password: str | None) -> str | None:
|
|
30
|
+
"""会话文件只保存密码指纹,用于在密码变更后作废旧登录态。"""
|
|
31
|
+
if password is None:
|
|
32
|
+
return None
|
|
33
|
+
return hashlib.sha256(password.encode("utf-8")).hexdigest()[:16]
|
|
34
|
+
|
|
35
|
+
|
|
20
36
|
#: 拉起 Bot 子进程的命令。
|
|
21
37
|
#:
|
|
22
38
|
#: 用**当前解释器**直接跑模块,而不是 ``uv run``:WebUI 自己就跑在这个解释器里,
|
|
@@ -35,33 +51,137 @@ class SessionEntry:
|
|
|
35
51
|
|
|
36
52
|
|
|
37
53
|
class SessionStore:
|
|
54
|
+
"""WebUI 会话表。
|
|
55
|
+
|
|
56
|
+
传入 ``storage_path`` 时会话会原子写入磁盘,控制台重启后自动恢复,
|
|
57
|
+
浏览器手里的 cookie / 令牌无需重新登录即可继续使用。
|
|
58
|
+
"""
|
|
59
|
+
|
|
38
60
|
def __init__(
|
|
39
61
|
self,
|
|
40
62
|
ttl_seconds: int = SESSION_TTL_SECONDS,
|
|
41
63
|
access_ttl_seconds: int = ACCESS_TOKEN_TTL_SECONDS,
|
|
42
64
|
refresh_ttl_seconds: int = REFRESH_TOKEN_TTL_SECONDS,
|
|
65
|
+
storage_path: Path | None = None,
|
|
66
|
+
password: str | None = None,
|
|
43
67
|
) -> None:
|
|
44
68
|
self._ttl_seconds = ttl_seconds
|
|
45
69
|
self._access_ttl_seconds = access_ttl_seconds
|
|
46
70
|
self._refresh_ttl_seconds = refresh_ttl_seconds
|
|
71
|
+
self._storage_path = storage_path
|
|
72
|
+
self._password_fingerprint = _password_fingerprint(password)
|
|
47
73
|
self._sessions: dict[str, SessionEntry] = {}
|
|
74
|
+
self._lock = threading.RLock()
|
|
75
|
+
self._load()
|
|
76
|
+
|
|
77
|
+
def _load(self) -> None:
|
|
78
|
+
path = self._storage_path
|
|
79
|
+
if path is None:
|
|
80
|
+
return
|
|
81
|
+
try:
|
|
82
|
+
raw = path.read_text(encoding="utf-8")
|
|
83
|
+
except FileNotFoundError:
|
|
84
|
+
return
|
|
85
|
+
except (OSError, UnicodeError) as exc:
|
|
86
|
+
logger.warning("[WebUI] 读取会话文件失败: %s", exc)
|
|
87
|
+
return
|
|
88
|
+
try:
|
|
89
|
+
payload = json.loads(raw)
|
|
90
|
+
except (ValueError, TypeError):
|
|
91
|
+
logger.warning("[WebUI] 会话文件损坏,已忽略: %s", path)
|
|
92
|
+
return
|
|
93
|
+
if not isinstance(payload, dict):
|
|
94
|
+
return
|
|
95
|
+
stored_fingerprint = payload.get("password_fingerprint")
|
|
96
|
+
if (
|
|
97
|
+
self._password_fingerprint is not None
|
|
98
|
+
and stored_fingerprint != self._password_fingerprint
|
|
99
|
+
):
|
|
100
|
+
# 密码已变更(例如直接编辑 config.toml 后重启),旧令牌必须失效。
|
|
101
|
+
logger.info("[WebUI] 管理密码已变更,清除旧登录会话")
|
|
102
|
+
# 立即用新指纹覆盖磁盘,避免密码回滚后旧会话重新生效。
|
|
103
|
+
self._persist()
|
|
104
|
+
return
|
|
105
|
+
raw_sessions = payload.get("sessions")
|
|
106
|
+
if not isinstance(raw_sessions, dict):
|
|
107
|
+
return
|
|
108
|
+
now = time.time()
|
|
109
|
+
for token, value in raw_sessions.items():
|
|
110
|
+
if not isinstance(token, str) or not token or not isinstance(value, dict):
|
|
111
|
+
continue
|
|
112
|
+
try:
|
|
113
|
+
expires_at = float(value.get("expires_at") or 0)
|
|
114
|
+
except (TypeError, ValueError):
|
|
115
|
+
continue
|
|
116
|
+
kind = str(value.get("kind") or "session")
|
|
117
|
+
if kind not in {"session", "access", "refresh"} or expires_at <= now:
|
|
118
|
+
continue
|
|
119
|
+
self._sessions[token] = SessionEntry(expires_at=expires_at, kind=kind)
|
|
120
|
+
|
|
121
|
+
def _payload(self) -> dict[str, object]:
|
|
122
|
+
now = time.time()
|
|
123
|
+
return {
|
|
124
|
+
"version": SESSION_FILE_VERSION,
|
|
125
|
+
"password_fingerprint": self._password_fingerprint,
|
|
126
|
+
"sessions": {
|
|
127
|
+
token: {"expires_at": entry.expires_at, "kind": entry.kind}
|
|
128
|
+
for token, entry in self._sessions.items()
|
|
129
|
+
if entry.expires_at > now
|
|
130
|
+
},
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
def _persist_strict(self) -> None:
|
|
134
|
+
"""写盘失败时向上抛出,供登出/刷新等需要强一致性的路径回滚。"""
|
|
135
|
+
path = self._storage_path
|
|
136
|
+
if path is None:
|
|
137
|
+
return
|
|
138
|
+
write_json_sync(path, self._payload(), use_lock=False)
|
|
139
|
+
|
|
140
|
+
def _prune_expired(self) -> None:
|
|
141
|
+
now = time.time()
|
|
142
|
+
for token in [
|
|
143
|
+
token for token, entry in self._sessions.items() if entry.expires_at <= now
|
|
144
|
+
]:
|
|
145
|
+
self._sessions.pop(token, None)
|
|
146
|
+
|
|
147
|
+
def _persist(self) -> None:
|
|
148
|
+
"""登录与校验路径的 best-effort 写盘;磁盘异常只告警。"""
|
|
149
|
+
try:
|
|
150
|
+
self._persist_strict()
|
|
151
|
+
except Exception as exc: # 磁盘异常不应让登录/校验直接失败
|
|
152
|
+
logger.warning("[WebUI] 写入会话文件失败: %s", exc)
|
|
153
|
+
return
|
|
154
|
+
self._prune_expired()
|
|
48
155
|
|
|
49
156
|
def create(self, *, ttl_seconds: int | None = None, kind: str = "session") -> str:
|
|
50
157
|
token = secrets.token_urlsafe(32)
|
|
51
158
|
ttl = self._ttl_seconds if ttl_seconds is None else ttl_seconds
|
|
52
|
-
self.
|
|
159
|
+
with self._lock:
|
|
160
|
+
self._sessions[token] = SessionEntry(
|
|
161
|
+
expires_at=time.time() + ttl, kind=kind
|
|
162
|
+
)
|
|
163
|
+
self._persist()
|
|
53
164
|
return token
|
|
54
165
|
|
|
55
166
|
def _resolve_entry(self, token: str | None) -> SessionEntry | None:
|
|
56
167
|
if not token:
|
|
57
168
|
return None
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
169
|
+
with self._lock:
|
|
170
|
+
entry = self._sessions.get(token)
|
|
171
|
+
if entry is None:
|
|
172
|
+
return None
|
|
173
|
+
now = time.time()
|
|
174
|
+
if entry.expires_at < now:
|
|
175
|
+
self._sessions.pop(token, None)
|
|
176
|
+
self._persist()
|
|
177
|
+
return None
|
|
178
|
+
# 活跃会话滑动续期:剩余不足一半时重新计时,长期使用不会掉线。
|
|
179
|
+
if entry.kind == "session":
|
|
180
|
+
ttl = self._ttl_seconds
|
|
181
|
+
if ttl > 0 and entry.expires_at - now < ttl / 2:
|
|
182
|
+
entry.expires_at = now + ttl
|
|
183
|
+
self._persist()
|
|
184
|
+
return entry
|
|
65
185
|
|
|
66
186
|
def is_valid(
|
|
67
187
|
self,
|
|
@@ -86,38 +206,96 @@ class SessionStore:
|
|
|
86
206
|
entry = self._resolve_entry(token)
|
|
87
207
|
return None if entry is None else entry.kind
|
|
88
208
|
|
|
89
|
-
def
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
209
|
+
def _issue_auth_tokens_locked(self) -> dict[str, int | str]:
|
|
210
|
+
now = time.time()
|
|
211
|
+
access_token = secrets.token_urlsafe(32)
|
|
212
|
+
refresh_token = secrets.token_urlsafe(32)
|
|
213
|
+
self._sessions[access_token] = SessionEntry(
|
|
214
|
+
expires_at=now + self._access_ttl_seconds, kind="access"
|
|
93
215
|
)
|
|
94
|
-
refresh_token =
|
|
95
|
-
|
|
96
|
-
kind="refresh",
|
|
216
|
+
self._sessions[refresh_token] = SessionEntry(
|
|
217
|
+
expires_at=now + self._refresh_ttl_seconds, kind="refresh"
|
|
97
218
|
)
|
|
98
219
|
return {
|
|
99
220
|
"access_token": access_token,
|
|
100
221
|
"refresh_token": refresh_token,
|
|
101
222
|
"expires_in": self._access_ttl_seconds,
|
|
102
223
|
"refresh_expires_in": self._refresh_ttl_seconds,
|
|
103
|
-
"access_token_expires_at": self.
|
|
224
|
+
"access_token_expires_at": int((now + self._access_ttl_seconds) * 1000),
|
|
104
225
|
}
|
|
105
226
|
|
|
227
|
+
def issue_auth_tokens(self) -> dict[str, int | str]:
|
|
228
|
+
with self._lock:
|
|
229
|
+
tokens = self._issue_auth_tokens_locked()
|
|
230
|
+
self._persist()
|
|
231
|
+
return tokens
|
|
232
|
+
|
|
106
233
|
def refresh_auth_tokens(
|
|
107
234
|
self, refresh_token: str | None
|
|
108
235
|
) -> dict[str, int | str] | None:
|
|
109
|
-
if not
|
|
236
|
+
if not refresh_token:
|
|
110
237
|
return None
|
|
111
|
-
self.
|
|
112
|
-
|
|
238
|
+
with self._lock:
|
|
239
|
+
entry = self._sessions.get(refresh_token)
|
|
240
|
+
if entry is None or entry.kind != "refresh":
|
|
241
|
+
return None
|
|
242
|
+
if entry.expires_at < time.time():
|
|
243
|
+
self._sessions.pop(refresh_token, None)
|
|
244
|
+
try:
|
|
245
|
+
self._persist_strict()
|
|
246
|
+
except Exception:
|
|
247
|
+
self._sessions[refresh_token] = entry
|
|
248
|
+
raise
|
|
249
|
+
return None
|
|
250
|
+
# 旧 refresh token 立即作废并轮换,避免重放。
|
|
251
|
+
previous = dict(self._sessions)
|
|
252
|
+
self._sessions.pop(refresh_token, None)
|
|
253
|
+
tokens = self._issue_auth_tokens_locked()
|
|
254
|
+
try:
|
|
255
|
+
self._persist_strict()
|
|
256
|
+
except Exception:
|
|
257
|
+
self._sessions = previous
|
|
258
|
+
raise
|
|
259
|
+
return tokens
|
|
113
260
|
|
|
114
261
|
def revoke(self, token: str | None) -> None:
|
|
115
262
|
if not token:
|
|
116
263
|
return
|
|
117
|
-
self.
|
|
264
|
+
with self._lock:
|
|
265
|
+
entry = self._sessions.pop(token, None)
|
|
266
|
+
if entry is None:
|
|
267
|
+
return
|
|
268
|
+
try:
|
|
269
|
+
self._persist_strict()
|
|
270
|
+
except Exception:
|
|
271
|
+
self._sessions[token] = entry
|
|
272
|
+
raise
|
|
273
|
+
|
|
274
|
+
def set_password(self, password: str | None) -> None:
|
|
275
|
+
"""密码变更后作废全部旧会话,并更新会话文件中的密码指纹。
|
|
276
|
+
|
|
277
|
+
写盘失败时内存中的旧会话保持作废(fail closed),但密码指纹回滚,
|
|
278
|
+
异常抛给调用方;后续密码重载会重新尝试持久化新指纹。
|
|
279
|
+
"""
|
|
280
|
+
with self._lock:
|
|
281
|
+
previous_fingerprint = self._password_fingerprint
|
|
282
|
+
self._password_fingerprint = _password_fingerprint(password)
|
|
283
|
+
self._sessions.clear()
|
|
284
|
+
try:
|
|
285
|
+
self._persist_strict()
|
|
286
|
+
except Exception:
|
|
287
|
+
self._password_fingerprint = previous_fingerprint
|
|
288
|
+
raise
|
|
118
289
|
|
|
119
290
|
def clear(self) -> None:
|
|
120
|
-
self.
|
|
291
|
+
with self._lock:
|
|
292
|
+
previous = dict(self._sessions)
|
|
293
|
+
self._sessions.clear()
|
|
294
|
+
try:
|
|
295
|
+
self._persist_strict()
|
|
296
|
+
except Exception:
|
|
297
|
+
self._sessions = previous
|
|
298
|
+
raise
|
|
121
299
|
|
|
122
300
|
|
|
123
301
|
class BotProcessController:
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
+
import logging
|
|
2
3
|
import tomllib
|
|
3
4
|
|
|
4
5
|
from aiohttp import web
|
|
@@ -7,13 +8,13 @@ from aiohttp.web_response import Response
|
|
|
7
8
|
from Undefined.config.loader import CONFIG_PATH, DEFAULT_WEBUI_PASSWORD
|
|
8
9
|
from Undefined.config import WebUISettings, get_config_manager
|
|
9
10
|
from Undefined.utils import io as async_io
|
|
11
|
+
from ..core import REFRESH_TOKEN_TTL_SECONDS, SESSION_TTL_SECONDS
|
|
10
12
|
from ..utils.config_io import config_write_lock
|
|
11
13
|
from ._shared import (
|
|
12
14
|
auth_capabilities,
|
|
13
15
|
routes,
|
|
14
16
|
SESSION_COOKIE,
|
|
15
17
|
TOKEN_COOKIE,
|
|
16
|
-
SESSION_TTL_SECONDS,
|
|
17
18
|
SETTINGS_APP_KEY,
|
|
18
19
|
get_bearer_token,
|
|
19
20
|
get_refresh_token,
|
|
@@ -29,6 +30,8 @@ from ._shared import (
|
|
|
29
30
|
)
|
|
30
31
|
from ..utils import read_config_source, apply_patch, load_comment_map, render_toml
|
|
31
32
|
|
|
33
|
+
logger = logging.getLogger(__name__)
|
|
34
|
+
|
|
32
35
|
|
|
33
36
|
def _build_session_payload(
|
|
34
37
|
request: web.Request, authenticated: bool
|
|
@@ -120,7 +123,7 @@ async def login_handler(request: web.Request) -> Response:
|
|
|
120
123
|
str(auth_tokens["refresh_token"]),
|
|
121
124
|
httponly=True,
|
|
122
125
|
samesite="Lax",
|
|
123
|
-
max_age=
|
|
126
|
+
max_age=REFRESH_TOKEN_TTL_SECONDS,
|
|
124
127
|
)
|
|
125
128
|
return resp
|
|
126
129
|
|
|
@@ -154,7 +157,13 @@ async def refresh_handler(request: web.Request) -> Response:
|
|
|
154
157
|
except Exception:
|
|
155
158
|
data = {}
|
|
156
159
|
refresh_token = get_refresh_token(request, data)
|
|
157
|
-
|
|
160
|
+
try:
|
|
161
|
+
tokens = get_session_store(request).refresh_auth_tokens(refresh_token)
|
|
162
|
+
except OSError as exc:
|
|
163
|
+
logger.warning("[WebUI] 刷新令牌时写入会话文件失败: %s", exc)
|
|
164
|
+
return web.json_response(
|
|
165
|
+
{"success": False, "error": "Failed to persist session"}, status=500
|
|
166
|
+
)
|
|
158
167
|
if tokens is None:
|
|
159
168
|
return web.json_response(
|
|
160
169
|
{"success": False, "error": "Unauthorized"}, status=401
|
|
@@ -172,7 +181,7 @@ async def refresh_handler(request: web.Request) -> Response:
|
|
|
172
181
|
str(tokens["refresh_token"]),
|
|
173
182
|
httponly=True,
|
|
174
183
|
samesite="Lax",
|
|
175
|
-
max_age=
|
|
184
|
+
max_age=REFRESH_TOKEN_TTL_SECONDS,
|
|
176
185
|
)
|
|
177
186
|
return resp
|
|
178
187
|
|
|
@@ -185,6 +194,7 @@ async def logout_handler(request: web.Request) -> Response:
|
|
|
185
194
|
except Exception:
|
|
186
195
|
data = {}
|
|
187
196
|
sessions = get_session_store(request)
|
|
197
|
+
failed = False
|
|
188
198
|
for token in {
|
|
189
199
|
get_valid_auth_token(request),
|
|
190
200
|
request.cookies.get(SESSION_COOKIE),
|
|
@@ -192,7 +202,15 @@ async def logout_handler(request: web.Request) -> Response:
|
|
|
192
202
|
get_refresh_token(request, data),
|
|
193
203
|
get_bearer_token(request),
|
|
194
204
|
}:
|
|
195
|
-
|
|
205
|
+
try:
|
|
206
|
+
sessions.revoke(token)
|
|
207
|
+
except OSError as exc:
|
|
208
|
+
failed = True
|
|
209
|
+
logger.warning("[WebUI] 登出时写入会话文件失败: %s", exc)
|
|
210
|
+
if failed:
|
|
211
|
+
return web.json_response(
|
|
212
|
+
{"success": False, "error": "Failed to persist session"}, status=500
|
|
213
|
+
)
|
|
196
214
|
resp = web.json_response({"success": True})
|
|
197
215
|
resp.del_cookie(SESSION_COOKIE)
|
|
198
216
|
resp.del_cookie(TOKEN_COOKIE)
|
|
@@ -264,10 +282,11 @@ async def password_handler(request: web.Request) -> Response:
|
|
|
264
282
|
await asyncio.to_thread(write_password)
|
|
265
283
|
manager = get_config_manager()
|
|
266
284
|
manager.reload()
|
|
285
|
+
# 先完成会话失效持久化,再启用新密码;失败时由 500 分支返回。
|
|
286
|
+
get_session_store(request).set_password(new_password)
|
|
267
287
|
request.app[SETTINGS_APP_KEY] = WebUISettings.from_config(
|
|
268
288
|
manager.load(strict=False), config_exists=True
|
|
269
289
|
)
|
|
270
|
-
get_session_store(request).clear()
|
|
271
290
|
|
|
272
291
|
try:
|
|
273
292
|
await async_io.run_cancellation_safe(password_and_reload())
|
|
@@ -275,6 +294,12 @@ async def password_handler(request: web.Request) -> Response:
|
|
|
275
294
|
return web.json_response(
|
|
276
295
|
{"success": False, "error": f"TOML parse error: {exc}"}, status=400
|
|
277
296
|
)
|
|
297
|
+
except OSError as exc:
|
|
298
|
+
logger.warning("[WebUI] 更新密码后写入持久化状态失败: %s", exc)
|
|
299
|
+
return web.json_response(
|
|
300
|
+
{"success": False, "error": "Failed to persist password change"},
|
|
301
|
+
status=500,
|
|
302
|
+
)
|
|
278
303
|
|
|
279
304
|
resp = web.json_response({"success": True, "message": "Password updated"})
|
|
280
305
|
resp.del_cookie(SESSION_COOKIE)
|
|
@@ -27,7 +27,6 @@ _PENDING_BOT_AUTOSTART_MARKER = Path("data/cache/pending_bot_autostart")
|
|
|
27
27
|
|
|
28
28
|
SESSION_COOKIE = "undefined_webui"
|
|
29
29
|
TOKEN_COOKIE = "undefined_webui_token"
|
|
30
|
-
SESSION_TTL_SECONDS = 8 * 60 * 60
|
|
31
30
|
LOGIN_ATTEMPT_LIMIT = 5
|
|
32
31
|
LOGIN_ATTEMPT_WINDOW = 5 * 60
|
|
33
32
|
LOGIN_BLOCK_SECONDS = 15 * 60
|
|
@@ -167,10 +167,16 @@ function updateAuthFromPayload(payload) {
|
|
|
167
167
|
|
|
168
168
|
let _authRefreshRequest = null;
|
|
169
169
|
|
|
170
|
+
function unauthorizedError(authFailure) {
|
|
171
|
+
const error = new Error("Unauthorized");
|
|
172
|
+
error.authFailure = !!authFailure;
|
|
173
|
+
return error;
|
|
174
|
+
}
|
|
175
|
+
|
|
170
176
|
async function refreshAccessToken() {
|
|
171
177
|
const refreshToken = state.authRefreshToken;
|
|
172
178
|
if (!refreshToken) {
|
|
173
|
-
throw
|
|
179
|
+
throw unauthorizedError(false);
|
|
174
180
|
}
|
|
175
181
|
if (_authRefreshRequest?.token === refreshToken) {
|
|
176
182
|
return _authRefreshRequest.promise;
|
|
@@ -194,8 +200,33 @@ async function refreshAccessToken() {
|
|
|
194
200
|
// 登录或退出可能已替换会话;旧请求不能改写新令牌。
|
|
195
201
|
if (state.authRefreshToken !== refreshToken) return payload;
|
|
196
202
|
if (!response.ok || !updateAuthFromPayload(payload)) {
|
|
197
|
-
|
|
198
|
-
|
|
203
|
+
const storedRefreshToken = readAuthStorage(
|
|
204
|
+
"undefined_auth_refresh_token",
|
|
205
|
+
);
|
|
206
|
+
if (storedRefreshToken && storedRefreshToken !== refreshToken) {
|
|
207
|
+
// 其他标签页已轮换令牌:跟随共享存储,避免清掉新令牌。
|
|
208
|
+
const adopted = updateAuthFromPayload({
|
|
209
|
+
accessToken: readAuthStorage("undefined_auth_access_token"),
|
|
210
|
+
refreshToken: storedRefreshToken,
|
|
211
|
+
accessTokenExpiresAt:
|
|
212
|
+
Number.parseInt(
|
|
213
|
+
readAuthStorage(
|
|
214
|
+
"undefined_auth_access_expires_at",
|
|
215
|
+
) || "0",
|
|
216
|
+
10,
|
|
217
|
+
) || 0,
|
|
218
|
+
});
|
|
219
|
+
// 采用替换令牌后按成功处理,让调用方用新 access token 重试。
|
|
220
|
+
if (adopted) return payload;
|
|
221
|
+
}
|
|
222
|
+
// 只有服务端明确判定登录态失效时才清除令牌;
|
|
223
|
+
// 5xx 或异常响应属于可重试失败,保留令牌等待下次刷新。
|
|
224
|
+
if (response.status === 401 || response.status === 403) {
|
|
225
|
+
clearStoredAuthTokens();
|
|
226
|
+
}
|
|
227
|
+
throw unauthorizedError(
|
|
228
|
+
response.status === 401 || response.status === 403,
|
|
229
|
+
);
|
|
199
230
|
}
|
|
200
231
|
return payload;
|
|
201
232
|
})();
|
|
@@ -215,11 +246,13 @@ async function api(path, options = {}) {
|
|
|
215
246
|
!!state.authAccessTokenExpiresAt &&
|
|
216
247
|
state.authAccessTokenExpiresAt <= Date.now() + 60_000;
|
|
217
248
|
|
|
249
|
+
let refreshFailure = null;
|
|
218
250
|
if (accessExpiringSoon && method !== "OPTIONS") {
|
|
219
251
|
try {
|
|
220
252
|
await refreshAccessToken();
|
|
221
|
-
} catch (
|
|
222
|
-
//
|
|
253
|
+
} catch (error) {
|
|
254
|
+
// 记录失败原因,由资源请求结果决定是否降级登录态。
|
|
255
|
+
refreshFailure = error;
|
|
223
256
|
}
|
|
224
257
|
}
|
|
225
258
|
|
|
@@ -231,15 +264,21 @@ async function api(path, options = {}) {
|
|
|
231
264
|
) {
|
|
232
265
|
try {
|
|
233
266
|
await refreshAccessToken();
|
|
267
|
+
refreshFailure = null;
|
|
234
268
|
res = await apiWithFallback(candidates, {
|
|
235
269
|
...options,
|
|
236
270
|
_skipRefreshRetry: true,
|
|
237
271
|
});
|
|
238
|
-
} catch (
|
|
272
|
+
} catch (error) {
|
|
239
273
|
// refreshAccessToken 只清除仍属于失败请求的令牌。
|
|
274
|
+
refreshFailure = error;
|
|
240
275
|
}
|
|
241
276
|
}
|
|
242
277
|
if (res.status === 401) {
|
|
278
|
+
if (refreshFailure && !refreshFailure.authFailure) {
|
|
279
|
+
// 刷新因网络或服务端故障失败:保留登录态,交回原始 401 响应。
|
|
280
|
+
return res;
|
|
281
|
+
}
|
|
243
282
|
state.authenticated = false;
|
|
244
283
|
refreshUI();
|
|
245
284
|
throw new Error("Unauthorized");
|