vibego 0.2.38__tar.gz → 0.2.40__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.
Potentially problematic release.
This version of vibego might be problematic. Click here for more details.
- {vibego-0.2.38 → vibego-0.2.40}/PKG-INFO +1 -1
- {vibego-0.2.38 → vibego-0.2.40}/bot.py +45 -33
- {vibego-0.2.38 → vibego-0.2.40}/pyproject.toml +3 -3
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_long_poll_mechanism.py +18 -15
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_markdown_guard.py +18 -19
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_task_description.py +7 -1
- vibego-0.2.40/tests/test_telegram_markdown_renderer.py +44 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_unescape_markdown.py +2 -2
- {vibego-0.2.38 → vibego-0.2.40}/vibego.egg-info/PKG-INFO +1 -1
- {vibego-0.2.38 → vibego-0.2.40}/vibego.egg-info/SOURCES.txt +0 -1
- {vibego-0.2.38 → vibego-0.2.40}/vibego.egg-info/top_level.txt +0 -1
- {vibego-0.2.38 → vibego-0.2.40}/vibego_cli/__init__.py +1 -1
- vibego-0.2.38/telegram_markdown/__init__.py +0 -269
- vibego-0.2.38/tests/test_telegram_markdown_renderer.py +0 -96
- {vibego-0.2.38 → vibego-0.2.40}/MANIFEST.in +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/README.md +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/config/projects.json.example +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/logging_setup.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/master.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/project_repository.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/__main__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/__pip-runner__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/build_env.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cache.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/autocompletion.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/base_command.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/cmdoptions.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/command_context.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/index_command.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/main.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/main_parser.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/parser.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/progress_bars.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/req_command.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/spinners.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/cli/status_codes.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/cache.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/check.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/completion.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/configuration.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/debug.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/download.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/freeze.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/hash.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/help.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/index.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/inspect.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/install.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/list.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/lock.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/search.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/show.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/uninstall.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/commands/wheel.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/configuration.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/distributions/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/distributions/base.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/distributions/installed.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/distributions/sdist.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/distributions/wheel.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/exceptions.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/index/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/index/collector.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/index/package_finder.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/index/sources.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/locations/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/locations/_distutils.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/locations/_sysconfig.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/locations/base.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/main.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/metadata/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/metadata/_json.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/metadata/base.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/metadata/importlib/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/metadata/importlib/_compat.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/metadata/importlib/_dists.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/metadata/importlib/_envs.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/metadata/pkg_resources.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/candidate.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/direct_url.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/format_control.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/index.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/installation_report.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/link.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/pylock.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/scheme.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/search_scope.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/selection_prefs.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/target_python.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/models/wheel.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/network/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/network/auth.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/network/cache.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/network/download.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/network/lazy_wheel.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/network/session.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/network/utils.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/network/xmlrpc.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/build/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/build/build_tracker.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/build/metadata.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/build/metadata_editable.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/build/metadata_legacy.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/build/wheel.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/build/wheel_editable.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/build/wheel_legacy.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/check.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/freeze.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/install/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/install/editable_legacy.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/install/wheel.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/operations/prepare.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/pyproject.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/req/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/req/constructors.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/req/req_dependency_group.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/req/req_file.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/req/req_install.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/req/req_set.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/req/req_uninstall.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/base.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/legacy/resolver.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/resolvelib/base.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/resolvelib/candidates.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/resolvelib/factory.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/resolvelib/provider.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/resolvelib/reporter.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/resolvelib/requirements.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/resolution/resolvelib/resolver.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/self_outdated_check.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/_jaraco_text.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/_log.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/appdirs.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/compat.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/compatibility_tags.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/datetime.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/deprecation.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/direct_url_helpers.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/egg_link.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/entrypoints.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/filesystem.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/filetypes.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/glibc.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/hashes.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/logging.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/misc.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/packaging.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/retry.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/setuptools_build.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/subprocess.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/temp_dir.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/unpacking.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/urls.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/virtualenv.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/utils/wheel.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/vcs/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/vcs/bazaar.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/vcs/git.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/vcs/mercurial.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/vcs/subversion.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/vcs/versioncontrol.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_internal/wheel_builder.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/_cmd.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/adapter.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/cache.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/controller.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/filewrapper.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/heuristics.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/serialize.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/cachecontrol/wrapper.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/certifi/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/certifi/__main__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/certifi/core.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/dependency_groups/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/dependency_groups/__main__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/dependency_groups/_implementation.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/distlib/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/distlib/compat.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/distlib/resources.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/distlib/scripts.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/distlib/util.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/distro/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/distro/__main__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/distro/distro.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/idna/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/idna/codec.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/idna/compat.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/idna/core.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/idna/idnadata.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/idna/intranges.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/idna/package_data.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/idna/uts46data.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/msgpack/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/msgpack/exceptions.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/msgpack/ext.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/msgpack/fallback.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/_elffile.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/_manylinux.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/_musllinux.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/_parser.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/_structures.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/_tokenizer.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/licenses/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/licenses/_spdx.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/markers.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/metadata.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/requirements.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/specifiers.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/tags.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/utils.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/packaging/version.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pkg_resources/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/platformdirs/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/platformdirs/__main__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/platformdirs/android.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/platformdirs/api.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/platformdirs/macos.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/platformdirs/unix.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/platformdirs/version.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/platformdirs/windows.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/__main__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/console.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/filter.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/filters/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/formatter.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/formatters/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/formatters/_mapping.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/lexer.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/lexers/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/lexers/_mapping.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/lexers/python.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/modeline.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/plugin.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/regexopt.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/scanner.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/sphinxext.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/style.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/styles/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/styles/_mapping.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/token.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/unistring.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pygments/util.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pyproject_hooks/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pyproject_hooks/_impl.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/__version__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/_internal_utils.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/adapters.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/api.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/auth.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/certs.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/compat.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/cookies.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/exceptions.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/help.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/hooks.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/models.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/packages.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/sessions.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/status_codes.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/structures.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/requests/utils.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/resolvelib/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/resolvelib/providers.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/resolvelib/reporters.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/resolvelib/structs.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/__main__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_cell_widths.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_emoji_codes.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_emoji_replace.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_export_format.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_extension.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_fileno.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_inspect.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_log_render.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_loop.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_null_file.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_palettes.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_pick.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_ratio.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_spinners.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_stack.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_timer.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_win32_console.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_windows.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_windows_renderer.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/_wrap.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/abc.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/align.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/ansi.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/bar.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/box.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/cells.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/color.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/color_triplet.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/columns.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/console.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/constrain.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/containers.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/control.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/default_styles.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/diagnose.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/emoji.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/errors.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/file_proxy.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/filesize.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/highlighter.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/json.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/jupyter.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/layout.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/live.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/live_render.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/logging.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/markup.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/measure.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/padding.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/pager.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/palette.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/panel.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/pretty.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/progress.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/progress_bar.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/prompt.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/protocol.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/region.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/repr.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/rule.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/scope.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/screen.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/segment.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/spinner.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/status.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/style.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/styled.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/syntax.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/table.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/terminal_theme.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/text.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/theme.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/themes.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/traceback.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/rich/tree.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/tomli/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/tomli/_parser.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/tomli/_re.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/tomli/_types.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/tomli_w/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/tomli_w/_writer.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/truststore/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/truststore/_api.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/truststore/_macos.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/truststore/_openssl.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/truststore/_ssl_constants.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/truststore/_windows.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/_collections.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/_version.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/connection.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/connectionpool.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/contrib/appengine.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/contrib/socks.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/exceptions.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/fields.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/filepost.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/packages/six.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/poolmanager.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/request.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/response.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/connection.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/proxy.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/queue.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/request.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/response.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/retry.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/ssl_.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/ssltransport.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/timeout.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/url.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/.venv/lib/python3.14/site-packages/pip/_vendor/urllib3/util/wait.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/bump_version.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/log_writer.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/master_healthcheck.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/models/claudecode.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/models/codex.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/models/common.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/models/gemini.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/publish.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/requirements.txt +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/run_bot.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/start.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/start_tmux_codex.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/stop_all.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/stop_bot.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/scripts/test_deps_check.sh +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/setup.cfg +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tasks/__init__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tasks/commands.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tasks/constants.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tasks/fsm.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tasks/models.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tasks/service.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_auto_compact.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_chat_menu_buttons.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_claudecode_jsonl.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_master_project_management.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_master_restart.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_numbered_reply_inputs.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_plan_progress.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_task_create_flow.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_task_detail_back.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_task_list_entry.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/tests/test_version_display.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/vibego.egg-info/dependency_links.txt +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/vibego.egg-info/entry_points.txt +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/vibego.egg-info/requires.txt +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/vibego_cli/__main__.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/vibego_cli/config.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/vibego_cli/data/worker_requirements.txt +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/vibego_cli/deps.py +0 -0
- {vibego-0.2.38 → vibego-0.2.40}/vibego_cli/main.py +0 -0
|
@@ -69,8 +69,6 @@ from tasks.fsm import (
|
|
|
69
69
|
TaskNoteStates,
|
|
70
70
|
TaskPushStates,
|
|
71
71
|
)
|
|
72
|
-
from telegram_markdown import render_markdown_to_telegram
|
|
73
|
-
|
|
74
72
|
# --- 简单 .env 加载 ---
|
|
75
73
|
def load_env(p: str = ".env"):
|
|
76
74
|
"""从指定路径加载 dotenv 格式的键值对到进程环境变量。"""
|
|
@@ -128,7 +126,7 @@ TEST_PHASE_PROMPT = f"进入测试阶段{AGENTS_PHASE_SUFFIX}"
|
|
|
128
126
|
# 报告缺陷时的专用前缀,插入在统一提示语之前
|
|
129
127
|
BUG_REPORT_PREFIX = "报告一个缺陷,详见底部最新的缺陷描述。"
|
|
130
128
|
|
|
131
|
-
_parse_mode_env = (os.environ.get("TELEGRAM_PARSE_MODE") or "
|
|
129
|
+
_parse_mode_env = (os.environ.get("TELEGRAM_PARSE_MODE") or "Markdown").strip()
|
|
132
130
|
_parse_mode_key = _parse_mode_env.replace("-", "").replace("_", "").lower()
|
|
133
131
|
MODEL_OUTPUT_PARSE_MODE: Optional[ParseMode]
|
|
134
132
|
if _parse_mode_key in _PARSE_MODE_CANDIDATES:
|
|
@@ -136,7 +134,12 @@ if _parse_mode_key in _PARSE_MODE_CANDIDATES:
|
|
|
136
134
|
if MODEL_OUTPUT_PARSE_MODE is None:
|
|
137
135
|
worker_log.info("模型输出将按纯文本发送")
|
|
138
136
|
else:
|
|
139
|
-
|
|
137
|
+
mode_value = (
|
|
138
|
+
MODEL_OUTPUT_PARSE_MODE.value
|
|
139
|
+
if isinstance(MODEL_OUTPUT_PARSE_MODE, ParseMode)
|
|
140
|
+
else str(MODEL_OUTPUT_PARSE_MODE)
|
|
141
|
+
)
|
|
142
|
+
worker_log.info("模型输出 parse_mode:%s", mode_value)
|
|
140
143
|
else:
|
|
141
144
|
MODEL_OUTPUT_PARSE_MODE = ParseMode.MARKDOWN_V2
|
|
142
145
|
worker_log.warning(
|
|
@@ -503,8 +506,8 @@ def _is_already_escaped(text: str) -> bool:
|
|
|
503
506
|
|
|
504
507
|
# 对于短文本,放宽检测条件
|
|
505
508
|
if len(text) < 20:
|
|
506
|
-
#
|
|
507
|
-
if len(matches) >=
|
|
509
|
+
# 短文本出现任意转义字符即可认定为已转义,防止重复转义
|
|
510
|
+
if len(matches) >= 1:
|
|
508
511
|
return True
|
|
509
512
|
else:
|
|
510
513
|
# 检查转义字符密度(降低到 3%)
|
|
@@ -576,29 +579,17 @@ def _unescape_if_already_escaped(text: str) -> str:
|
|
|
576
579
|
def _prepare_model_payload(text: str) -> str:
|
|
577
580
|
if _IS_MARKDOWN_V2:
|
|
578
581
|
cleaned = _unescape_if_already_escaped(text)
|
|
579
|
-
return
|
|
582
|
+
return _escape_markdown_v2(cleaned)
|
|
580
583
|
if _IS_MARKDOWN:
|
|
581
584
|
return _normalize_legacy_markdown(text)
|
|
582
585
|
return text
|
|
583
586
|
|
|
584
587
|
|
|
585
|
-
def _optimize_markdown_v2_payload(payload: str) -> str:
|
|
586
|
-
"""占位函数:保留严格转义版本,确保 MarkdownV2 合规。"""
|
|
587
|
-
|
|
588
|
-
return payload
|
|
589
|
-
|
|
590
|
-
|
|
591
588
|
def _prepare_model_payload_variants(text: str) -> tuple[str, Optional[str]]:
|
|
592
|
-
"""
|
|
593
|
-
|
|
594
|
-
strict_payload = _prepare_model_payload(text)
|
|
595
|
-
if not _IS_MARKDOWN_V2:
|
|
596
|
-
return strict_payload, None
|
|
589
|
+
"""返回首选与备用内容,默认为单一格式。"""
|
|
597
590
|
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
return optimized_payload, strict_payload
|
|
601
|
-
return strict_payload, None
|
|
591
|
+
payload = _prepare_model_payload(text)
|
|
592
|
+
return payload, None
|
|
602
593
|
|
|
603
594
|
|
|
604
595
|
def _extract_bad_request_message(exc: TelegramBadRequest) -> str:
|
|
@@ -704,20 +695,12 @@ async def _send_with_markdown_guard(
|
|
|
704
695
|
if raw_sender is None:
|
|
705
696
|
raise
|
|
706
697
|
|
|
707
|
-
# Markdown 彻底失败时退回纯文本发送,需要先清理 MarkdownV2 转义符号
|
|
708
|
-
fallback_payload = _force_unescape_markdown(text)
|
|
709
|
-
if fallback_payload != text:
|
|
710
|
-
worker_log.debug(
|
|
711
|
-
"Markdown 降级为纯文本发送,已移除转义符号",
|
|
712
|
-
extra={"original_length": len(text), "fallback_length": len(fallback_payload)},
|
|
713
|
-
)
|
|
714
|
-
|
|
715
698
|
worker_log.warning(
|
|
716
699
|
"Markdown 解析仍失败,将以纯文本发送",
|
|
717
700
|
extra={"length": len(text)},
|
|
718
701
|
)
|
|
719
|
-
await raw_sender(
|
|
720
|
-
return
|
|
702
|
+
await raw_sender(text)
|
|
703
|
+
return text
|
|
721
704
|
|
|
722
705
|
|
|
723
706
|
async def _notify_send_failure_message(chat_id: int) -> None:
|
|
@@ -4266,6 +4249,7 @@ async def _deliver_pending_messages(
|
|
|
4266
4249
|
"chat": chat_id,
|
|
4267
4250
|
},
|
|
4268
4251
|
)
|
|
4252
|
+
return False
|
|
4269
4253
|
else:
|
|
4270
4254
|
worker_log.info(
|
|
4271
4255
|
"模型输出已发送且计划完成",
|
|
@@ -4592,7 +4576,13 @@ async def _interrupt_long_poll(chat_id: int) -> None:
|
|
|
4592
4576
|
线程安全:使用 asyncio.Lock 保护状态访问。
|
|
4593
4577
|
"""
|
|
4594
4578
|
if CHAT_LONG_POLL_LOCK is None:
|
|
4595
|
-
|
|
4579
|
+
state = CHAT_LONG_POLL_STATE.get(chat_id)
|
|
4580
|
+
if state is not None:
|
|
4581
|
+
state["interrupted"] = True
|
|
4582
|
+
worker_log.info(
|
|
4583
|
+
"标记延迟轮询为待中断",
|
|
4584
|
+
extra={"chat": chat_id},
|
|
4585
|
+
)
|
|
4596
4586
|
return
|
|
4597
4587
|
|
|
4598
4588
|
async with CHAT_LONG_POLL_LOCK:
|
|
@@ -4685,6 +4675,13 @@ async def _watch_and_notify(chat_id: int, session_path: Path,
|
|
|
4685
4675
|
"max_rounds": long_poll_max_rounds,
|
|
4686
4676
|
"interrupted": False,
|
|
4687
4677
|
}
|
|
4678
|
+
else:
|
|
4679
|
+
CHAT_LONG_POLL_STATE[chat_id] = {
|
|
4680
|
+
"active": True,
|
|
4681
|
+
"round": 0,
|
|
4682
|
+
"max_rounds": long_poll_max_rounds,
|
|
4683
|
+
"interrupted": False,
|
|
4684
|
+
}
|
|
4688
4685
|
worker_log.info(
|
|
4689
4686
|
"首次发送成功,启动延迟轮询模式",
|
|
4690
4687
|
extra={
|
|
@@ -4706,6 +4703,10 @@ async def _watch_and_notify(chat_id: int, session_path: Path,
|
|
|
4706
4703
|
state = CHAT_LONG_POLL_STATE.get(chat_id)
|
|
4707
4704
|
if state is not None:
|
|
4708
4705
|
state["round"] = 0
|
|
4706
|
+
else:
|
|
4707
|
+
state = CHAT_LONG_POLL_STATE.get(chat_id)
|
|
4708
|
+
if state is not None:
|
|
4709
|
+
state["round"] = 0
|
|
4709
4710
|
worker_log.info(
|
|
4710
4711
|
"延迟轮询中收到新消息,重置计数",
|
|
4711
4712
|
extra={
|
|
@@ -4721,6 +4722,10 @@ async def _watch_and_notify(chat_id: int, session_path: Path,
|
|
|
4721
4722
|
state = CHAT_LONG_POLL_STATE.get(chat_id)
|
|
4722
4723
|
if state is not None:
|
|
4723
4724
|
state["round"] = long_poll_rounds
|
|
4725
|
+
else:
|
|
4726
|
+
state = CHAT_LONG_POLL_STATE.get(chat_id)
|
|
4727
|
+
if state is not None:
|
|
4728
|
+
state["round"] = long_poll_rounds
|
|
4724
4729
|
|
|
4725
4730
|
if long_poll_rounds >= long_poll_max_rounds:
|
|
4726
4731
|
worker_log.info(
|
|
@@ -4757,6 +4762,13 @@ async def _watch_and_notify(chat_id: int, session_path: Path,
|
|
|
4757
4762
|
"监听任务退出,已清理延迟轮询状态",
|
|
4758
4763
|
extra={"chat": chat_id},
|
|
4759
4764
|
)
|
|
4765
|
+
else:
|
|
4766
|
+
if chat_id in CHAT_LONG_POLL_STATE:
|
|
4767
|
+
CHAT_LONG_POLL_STATE.pop(chat_id, None)
|
|
4768
|
+
worker_log.debug(
|
|
4769
|
+
"监听任务退出,已清理延迟轮询状态",
|
|
4770
|
+
extra={"chat": chat_id},
|
|
4771
|
+
)
|
|
4760
4772
|
|
|
4761
4773
|
|
|
4762
4774
|
def _read_pointer_path(pointer: Path) -> Optional[Path]:
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "vibego"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.40"
|
|
8
8
|
description = "vibego CLI:用于初始化与管理 Telegram Master Bot 的工具"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -35,14 +35,14 @@ include-package-data = true
|
|
|
35
35
|
py-modules = ["bot", "master", "logging_setup", "project_repository"]
|
|
36
36
|
|
|
37
37
|
[tool.setuptools.packages.find]
|
|
38
|
-
include = ["vibego_cli", "tasks", "scripts"
|
|
38
|
+
include = ["vibego_cli", "tasks", "scripts"]
|
|
39
39
|
|
|
40
40
|
[tool.setuptools.package-data]
|
|
41
41
|
"vibego_cli" = ["data/*.txt"]
|
|
42
42
|
"scripts" = ["*.sh", "models/*.sh"]
|
|
43
43
|
|
|
44
44
|
[tool.bumpversion]
|
|
45
|
-
current_version = "0.2.
|
|
45
|
+
current_version = "0.2.40"
|
|
46
46
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
|
|
47
47
|
serialize = ["{major}.{minor}.{patch}"]
|
|
48
48
|
search = "{current_version}"
|
|
@@ -50,11 +50,13 @@ def reset_global_state():
|
|
|
50
50
|
bot.SESSION_OFFSETS.clear()
|
|
51
51
|
bot.CHAT_DELIVERED_HASHES.clear()
|
|
52
52
|
bot.CHAT_DELIVERED_OFFSETS.clear()
|
|
53
|
+
bot.CHAT_LONG_POLL_LOCK = None
|
|
53
54
|
yield
|
|
54
55
|
bot.CHAT_LONG_POLL_STATE.clear()
|
|
55
56
|
bot.SESSION_OFFSETS.clear()
|
|
56
57
|
bot.CHAT_DELIVERED_HASHES.clear()
|
|
57
58
|
bot.CHAT_DELIVERED_OFFSETS.clear()
|
|
59
|
+
bot.CHAT_LONG_POLL_LOCK = None
|
|
58
60
|
|
|
59
61
|
|
|
60
62
|
# ============================================================================
|
|
@@ -72,7 +74,7 @@ def test_interrupt_long_poll_sets_flag():
|
|
|
72
74
|
"interrupted": False,
|
|
73
75
|
}
|
|
74
76
|
|
|
75
|
-
bot._interrupt_long_poll(chat_id)
|
|
77
|
+
asyncio.run(bot._interrupt_long_poll(chat_id))
|
|
76
78
|
|
|
77
79
|
assert bot.CHAT_LONG_POLL_STATE[chat_id]["interrupted"] is True
|
|
78
80
|
|
|
@@ -84,7 +86,7 @@ def test_interrupt_long_poll_no_state():
|
|
|
84
86
|
bot.CHAT_LONG_POLL_STATE.pop(chat_id, None)
|
|
85
87
|
|
|
86
88
|
# 不应抛出异常
|
|
87
|
-
bot._interrupt_long_poll(chat_id)
|
|
89
|
+
asyncio.run(bot._interrupt_long_poll(chat_id))
|
|
88
90
|
|
|
89
91
|
|
|
90
92
|
# ============================================================================
|
|
@@ -126,7 +128,7 @@ async def test_watch_and_notify_enters_long_poll_after_first_delivery(mock_sessi
|
|
|
126
128
|
chat_id = 12345
|
|
127
129
|
delivery_count = 0
|
|
128
130
|
|
|
129
|
-
async def mock_deliver(cid, path):
|
|
131
|
+
async def mock_deliver(cid, path, **kwargs):
|
|
130
132
|
nonlocal delivery_count
|
|
131
133
|
delivery_count += 1
|
|
132
134
|
# 第一次返回 True(首次发送成功)
|
|
@@ -151,10 +153,10 @@ async def test_watch_and_notify_enters_long_poll_after_first_delivery(mock_sessi
|
|
|
151
153
|
assert chat_id in bot.CHAT_LONG_POLL_STATE
|
|
152
154
|
assert bot.CHAT_LONG_POLL_STATE[chat_id]["active"] is True
|
|
153
155
|
assert bot.CHAT_LONG_POLL_STATE[chat_id]["round"] == 0
|
|
154
|
-
assert bot.CHAT_LONG_POLL_STATE[chat_id]["max_rounds"] ==
|
|
156
|
+
assert bot.CHAT_LONG_POLL_STATE[chat_id]["max_rounds"] == 600
|
|
155
157
|
|
|
156
158
|
# 中断任务(避免等待 3 分钟)
|
|
157
|
-
bot._interrupt_long_poll(chat_id)
|
|
159
|
+
await bot._interrupt_long_poll(chat_id)
|
|
158
160
|
await asyncio.sleep(0.1)
|
|
159
161
|
|
|
160
162
|
# 取消任务
|
|
@@ -173,7 +175,7 @@ async def test_watch_and_notify_long_poll_increments_round(mock_session_path):
|
|
|
173
175
|
chat_id = 12345
|
|
174
176
|
delivery_count = 0
|
|
175
177
|
|
|
176
|
-
async def mock_deliver(cid, path):
|
|
178
|
+
async def mock_deliver(cid, path, **kwargs):
|
|
177
179
|
nonlocal delivery_count
|
|
178
180
|
delivery_count += 1
|
|
179
181
|
# 第一次返回 True,之后返回 False
|
|
@@ -204,7 +206,7 @@ async def test_watch_and_notify_long_poll_increments_round(mock_session_path):
|
|
|
204
206
|
await asyncio.sleep(0.3)
|
|
205
207
|
|
|
206
208
|
# 中断并清理
|
|
207
|
-
bot._interrupt_long_poll(chat_id)
|
|
209
|
+
await bot._interrupt_long_poll(chat_id)
|
|
208
210
|
await asyncio.sleep(0.1)
|
|
209
211
|
task.cancel()
|
|
210
212
|
try:
|
|
@@ -221,7 +223,7 @@ async def test_watch_and_notify_interrupted_by_new_message(mock_session_path):
|
|
|
221
223
|
chat_id = 12345
|
|
222
224
|
delivery_count = 0
|
|
223
225
|
|
|
224
|
-
async def mock_deliver(cid, path):
|
|
226
|
+
async def mock_deliver(cid, path, **kwargs):
|
|
225
227
|
nonlocal delivery_count
|
|
226
228
|
delivery_count += 1
|
|
227
229
|
return delivery_count == 1 # 只第一次返回 True
|
|
@@ -241,7 +243,7 @@ async def test_watch_and_notify_interrupted_by_new_message(mock_session_path):
|
|
|
241
243
|
assert chat_id in bot.CHAT_LONG_POLL_STATE
|
|
242
244
|
|
|
243
245
|
# 模拟新消息到达,中断轮询
|
|
244
|
-
bot._interrupt_long_poll(chat_id)
|
|
246
|
+
await bot._interrupt_long_poll(chat_id)
|
|
245
247
|
|
|
246
248
|
# 等待任务检测到中断标志并退出
|
|
247
249
|
await asyncio.sleep(0.2)
|
|
@@ -267,7 +269,7 @@ async def test_watch_and_notify_long_poll_resets_on_new_delivery(mock_session_pa
|
|
|
267
269
|
delivery_sequence = [True, False, False, True, False] # 第 1 和第 4 次有消息
|
|
268
270
|
delivery_index = 0
|
|
269
271
|
|
|
270
|
-
async def mock_deliver(cid, path):
|
|
272
|
+
async def mock_deliver(cid, path, **kwargs):
|
|
271
273
|
nonlocal delivery_index
|
|
272
274
|
result = delivery_sequence[delivery_index] if delivery_index < len(delivery_sequence) else False
|
|
273
275
|
delivery_index += 1
|
|
@@ -291,7 +293,7 @@ async def test_watch_and_notify_long_poll_resets_on_new_delivery(mock_session_pa
|
|
|
291
293
|
await asyncio.sleep(0.25)
|
|
292
294
|
|
|
293
295
|
# 中断并清理
|
|
294
|
-
bot._interrupt_long_poll(chat_id)
|
|
296
|
+
await bot._interrupt_long_poll(chat_id)
|
|
295
297
|
await asyncio.sleep(0.1)
|
|
296
298
|
task.cancel()
|
|
297
299
|
try:
|
|
@@ -316,11 +318,11 @@ def test_interrupt_long_poll_idempotent():
|
|
|
316
318
|
}
|
|
317
319
|
|
|
318
320
|
# 第一次调用
|
|
319
|
-
bot._interrupt_long_poll(chat_id)
|
|
321
|
+
asyncio.run(bot._interrupt_long_poll(chat_id))
|
|
320
322
|
assert bot.CHAT_LONG_POLL_STATE[chat_id]["interrupted"] is True
|
|
321
323
|
|
|
322
324
|
# 第二次调用(应该仍然是 True,不报错)
|
|
323
|
-
bot._interrupt_long_poll(chat_id)
|
|
325
|
+
asyncio.run(bot._interrupt_long_poll(chat_id))
|
|
324
326
|
assert bot.CHAT_LONG_POLL_STATE[chat_id]["interrupted"] is True
|
|
325
327
|
|
|
326
328
|
|
|
@@ -335,7 +337,7 @@ async def test_watch_and_notify_max_rounds_limit(mock_session_path):
|
|
|
335
337
|
chat_id = 12345
|
|
336
338
|
|
|
337
339
|
# 修改最大轮询次数为 2(便于测试)
|
|
338
|
-
async def mock_deliver(cid, path):
|
|
340
|
+
async def mock_deliver(cid, path, **kwargs):
|
|
339
341
|
# 只在第一次返回 True,进入延迟轮询
|
|
340
342
|
# 后续返回 False,让轮询计数递增
|
|
341
343
|
if not hasattr(mock_deliver, "called"):
|
|
@@ -362,7 +364,7 @@ async def test_watch_and_notify_does_not_block_event_loop(mock_session_path):
|
|
|
362
364
|
"""
|
|
363
365
|
chat_id = 12345
|
|
364
366
|
|
|
365
|
-
async def mock_deliver(cid, path):
|
|
367
|
+
async def mock_deliver(cid, path, **kwargs):
|
|
366
368
|
return False
|
|
367
369
|
|
|
368
370
|
with patch.object(bot, "_deliver_pending_messages", side_effect=mock_deliver):
|
|
@@ -397,3 +399,4 @@ async def test_watch_and_notify_does_not_block_event_loop(mock_session_path):
|
|
|
397
399
|
await task
|
|
398
400
|
except asyncio.CancelledError:
|
|
399
401
|
pass
|
|
402
|
+
import asyncio
|
|
@@ -10,8 +10,8 @@ import bot
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
@pytest.mark.asyncio()
|
|
13
|
-
async def
|
|
14
|
-
"""
|
|
13
|
+
async def test_markdown_guard_plain_fallback_preserves_original() -> None:
|
|
14
|
+
"""确保纯文本回退时返回原始内容(含必要转义)。"""
|
|
15
15
|
|
|
16
16
|
delivered: list[str] = []
|
|
17
17
|
|
|
@@ -39,31 +39,30 @@ async def test_markdown_guard_plain_fallback_removes_escapes() -> None:
|
|
|
39
39
|
original = "测试 \\_Markdown\\_ 转义"
|
|
40
40
|
result = await bot._send_with_markdown_guard(original, _failing_sender, raw_sender=_raw_sender)
|
|
41
41
|
|
|
42
|
-
assert delivered and delivered[0] ==
|
|
43
|
-
assert result ==
|
|
42
|
+
assert delivered and delivered[0] == original
|
|
43
|
+
assert result == original
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
@pytest.mark.asyncio()
|
|
47
47
|
@pytest.mark.parametrize(
|
|
48
|
-
|
|
48
|
+
"original",
|
|
49
49
|
[
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
50
|
+
"条目 A\\)",
|
|
51
|
+
"任务编码:/TASK\\_0022",
|
|
52
|
+
"配置文件 config\\.json",
|
|
53
|
+
"版本号 3\\.11\\.4",
|
|
54
|
+
"保留连字符 use\\-case",
|
|
55
|
+
"强调 \\*重要\\*",
|
|
56
|
+
"变量 \\_value\\_",
|
|
57
|
+
"选项 A\\|B",
|
|
58
|
+
"集合 \\{a, b\\}",
|
|
59
|
+
"说明 test\\.",
|
|
60
60
|
],
|
|
61
61
|
)
|
|
62
62
|
async def test_markdown_guard_plain_fallback_force_unescape(
|
|
63
63
|
original: str,
|
|
64
|
-
expected: str,
|
|
65
64
|
) -> None:
|
|
66
|
-
"""
|
|
65
|
+
"""验证纯文本回退会直接返回原始字符串。"""
|
|
67
66
|
|
|
68
67
|
delivered: list[str] = []
|
|
69
68
|
|
|
@@ -88,5 +87,5 @@ async def test_markdown_guard_plain_fallback_force_unescape(
|
|
|
88
87
|
|
|
89
88
|
result = await bot._send_with_markdown_guard(original, _failing_sender, raw_sender=_raw_sender)
|
|
90
89
|
|
|
91
|
-
assert delivered and delivered[0] ==
|
|
92
|
-
assert result ==
|
|
90
|
+
assert delivered and delivered[0] == original
|
|
91
|
+
assert result == original
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import json
|
|
3
3
|
import os
|
|
4
|
+
import sys
|
|
4
5
|
import time
|
|
5
6
|
from pathlib import Path
|
|
6
7
|
from types import SimpleNamespace
|
|
@@ -14,6 +15,10 @@ from aiogram.fsm.storage.base import StorageKey
|
|
|
14
15
|
from aiogram.fsm.storage.memory import MemoryStorage
|
|
15
16
|
from aiogram.types import InlineKeyboardMarkup, ReplyKeyboardMarkup
|
|
16
17
|
|
|
18
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
19
|
+
if str(ROOT) not in sys.path:
|
|
20
|
+
sys.path.insert(0, str(ROOT))
|
|
21
|
+
|
|
17
22
|
os.environ.setdefault("BOT_TOKEN", "TEST_TOKEN")
|
|
18
23
|
|
|
19
24
|
import bot
|
|
@@ -758,6 +763,7 @@ def test_bug_report_auto_push_success(monkeypatch, tmp_path: Path):
|
|
|
758
763
|
reply_to,
|
|
759
764
|
supplement: Optional[str],
|
|
760
765
|
actor: Optional[str],
|
|
766
|
+
is_bug_report: bool | None = None,
|
|
761
767
|
):
|
|
762
768
|
assert reply_to is message
|
|
763
769
|
push_calls.append((chat_id, supplement, actor))
|
|
@@ -1095,7 +1101,7 @@ def test_task_summary_command_triggers_request(monkeypatch, tmp_path: Path):
|
|
|
1095
1101
|
assert dispatch_calls, "应向模型推送摘要请求"
|
|
1096
1102
|
prompt_text = dispatch_calls[0][1]
|
|
1097
1103
|
assert prompt_text.startswith(
|
|
1098
|
-
"进入摘要阶段...\n任务编码:/
|
|
1104
|
+
"进入摘要阶段...\n任务编码:/TASK_0200\nSUMMARY_REQUEST_ID::"
|
|
1099
1105
|
)
|
|
1100
1106
|
assert message.calls, "应向用户提示处理结果"
|
|
1101
1107
|
reply_text, _, _, _ = message.calls[-1]
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
os.environ.setdefault("BOT_TOKEN", "dummy")
|
|
10
|
+
os.environ.setdefault("TELEGRAM_PARSE_MODE", "Markdown")
|
|
11
|
+
|
|
12
|
+
from bot import _prepare_model_payload, _prepare_model_payload_variants # noqa: E402
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@pytest.mark.parametrize(
|
|
16
|
+
("source", "expected"),
|
|
17
|
+
[
|
|
18
|
+
("**bold** text", "*bold* text"),
|
|
19
|
+
("__italic__", "_italic_"),
|
|
20
|
+
("`code_snippet`", "`code_snippet`"),
|
|
21
|
+
("普通文本 (test)", "普通文本 (test)"),
|
|
22
|
+
("raw *literal* star", "raw *literal* star"),
|
|
23
|
+
("multiline\nline2", "multiline\nline2"),
|
|
24
|
+
],
|
|
25
|
+
)
|
|
26
|
+
def test_prepare_model_payload_markdown(source: str, expected: str) -> None:
|
|
27
|
+
assert _prepare_model_payload(source) == expected
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def test_prepare_model_payload_preserves_checklist() -> None:
|
|
31
|
+
text = "- [ ] 第一项\n- [ ] 第二项"
|
|
32
|
+
assert _prepare_model_payload(text) == text
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def test_prepare_model_payload_handles_list_numbers() -> None:
|
|
36
|
+
text = "1. 选择 A\n2. 选择 B"
|
|
37
|
+
assert _prepare_model_payload(text) == text
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def test_prepare_model_payload_variants_returns_single_payload() -> None:
|
|
41
|
+
text = "纯文本内容"
|
|
42
|
+
primary, fallback = _prepare_model_payload_variants(text)
|
|
43
|
+
assert primary == "纯文本内容"
|
|
44
|
+
assert fallback is None
|
|
@@ -30,7 +30,7 @@ def test_is_already_escaped():
|
|
|
30
30
|
("hello_world", False, "普通下划线"),
|
|
31
31
|
("**粗体**", False, "未转义的粗体"),
|
|
32
32
|
("短文本", False, "太短的文本"),
|
|
33
|
-
(r"\*",
|
|
33
|
+
(r"\*", True, "单个转义字符也应识别为已转义"),
|
|
34
34
|
]
|
|
35
35
|
|
|
36
36
|
passed = 0
|
|
@@ -171,7 +171,7 @@ def test_edge_cases():
|
|
|
171
171
|
(" ", " ", "仅空格"),
|
|
172
172
|
(None, None, "None 值"), # 需要处理 None
|
|
173
173
|
("正常文本无需处理", "正常文本无需处理", "未检测到预转义"),
|
|
174
|
-
(r"\*",
|
|
174
|
+
(r"\*", "*", "单个转义字符同样需要反转义"),
|
|
175
175
|
(r"```\n\n```", r"```\n\n```", "空代码块"),
|
|
176
176
|
(r"`单独的反引号", r"`单独的反引号", "不匹配的反引号"),
|
|
177
177
|
(r"混合 **未转义** 和 \*\*已转义\*\*", r"混合 **未转义** 和 **已转义**", "混合转义状态"),
|