sycommon-python-lib 0.2.5a35__tar.gz → 0.2.5a36__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.
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/pyproject.toml +1 -1
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/deep_agent.py +39 -11
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/summarization_utils.py +4 -3
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/traceid.py +0 -3
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/rabbitmq/rabbitmq_client.py +14 -94
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +3 -24
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +35 -14
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +2 -20
- sycommon_python_lib-0.2.5a36/src/sycommon/tests/test_consumer_loss_rootcause.py +399 -0
- sycommon_python_lib-0.2.5a36/src/sycommon/tests/test_fix_verification.py +404 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon_python_lib.egg-info/SOURCES.txt +2 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/README.md +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/setup.cfg +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/cli.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/core/console.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/core/models.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/core/project.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/core/utils.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/api/query.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/db/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/db/service.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/model/parse.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/agent/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/.env.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/.gitignore.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/Dockerfile.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/app.yaml.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/model/file_info.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/base/requirements.txt.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/cli/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/cli/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/cli/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/cli/commands/hello.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/cli/pyproject.toml.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/web/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/web/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/web/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/web/api/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/web/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/web/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/web/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/web/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/command/templates/web/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/nexus/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/__main__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/agents/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/agents/factory.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/agents/prompts.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/browser.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/capabilities/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/capabilities/console.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/capabilities/dom.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/capabilities/network.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/capabilities/page_errors.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/capabilities/performance.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/capabilities/screenshot.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/client.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/protocol.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cdp/repl.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/cli.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/commands/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/commands/cdp_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/commands/chat_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/commands/create_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/commands/evaluate_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/commands/init_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/commands/memory_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/commands/resume_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/commands/rollback_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/commands/run_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/core/backend.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/core/config.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/core/display.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/core/git_integration.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/core/llm.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/core/state.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/evaluate/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/evaluate/api_evaluator.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/memory/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/memory/compressor.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/memory/full.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/memory/hot.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/memory/manager.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/memory/warm.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/mode/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/mode/create.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/mode/optimize.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/models/config_models.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/baseline_tests.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/checkpoint.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/convergence.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/diagnosis.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/engine.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/environment.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/experience.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/harness_prompts.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/history.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/optimization_logger.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/pre_validation.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/reward.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/strategy_bandit.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/strategy_generator.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/rl/strategy_prompts.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycli/skills/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/agent_manager.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/chat_events.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/mcp/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/mcp/models.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/mcp/tool_loader.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/multi_agent_team.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/sandbox/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/sandbox/file_ops.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/sandbox/session.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/auth/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/auth/ldap_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/auth/oa_cache.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/auth/oa_crypto.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/auth/oa_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/auth/wecom_ldap_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/Config.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/DatabaseConfig.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/ElasticsearchConfig.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/EmbeddingConfig.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/LLMConfig.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/LangfuseConfig.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/MQConfig.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/PgConfig.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/RedisConfig.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/RerankerConfig.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/SentryConfig.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/XxlJobConfig.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/config/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/database/async_base_db_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/database/async_database_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/database/base_db_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/database/database_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/database/elasticsearch_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/database/pg_checkpoint_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/database/redis_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/database/token_usage_db_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/health/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/health/health_check.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/health/metrics.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/health/ping.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/heartbeat_process/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/embedding.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/get_llm.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/llm_logger.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/llm_tokens.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/output_fixing_runnable.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/struct_token.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/sy_langfuse.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/token_usage_es_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/token_utils.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/llm/usage_token.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/logging/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/logging/async_sql_logger.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/logging/kafka_log.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/logging/logger_levels.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/logging/logger_wrapper.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/logging/process_logger.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/logging/sql_logger.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/mcp_server/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/mcp_server/server.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/context.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/cors.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/docs.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/exception.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/middleware.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/monitor_memory.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/mq.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/sandbox.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/timeout.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/token_tracking.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/tool_result_truncation.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/base_http.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/log.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/mcp_server_config.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/mqlistener_config.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/mqmsg_model.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/mqsend_config.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/sandbox.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/sso_user.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/token_usage.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/token_usage_mysql.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/models/xxljob_handler_config.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/notice/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/notice/uvicorn_monitor.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/notice/wecom_message.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/sentry/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/sentry/sy_sentry.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/services.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/sse/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/sse/event.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/sse/sse.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/example.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/example2.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/feign.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/feign_client.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/nacos_client_base.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/nacos_config_manager.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/nacos_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/nacos_service_registration.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/synacos/param.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/deep_agent_server.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_consumer_recovery.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_deep_agent.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_email.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_encoding_cache.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_mcp_server.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_mq.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_oa_login.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_real_summarization.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_summarization_config.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_summarization_real.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tests/test_summary_leak_e2e.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tools/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tools/async_utils.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tools/docs.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tools/env.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tools/merge_headers.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tools/snowflake.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tools/syemail.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/tools/timing.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/xxljob/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/xxljob/xxljob_service.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/tests/test_asyncio_logging.py +0 -0
- {sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/tests/test_sycli.py +0 -0
{sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/agent/deep_agent.py
RENAMED
|
@@ -201,26 +201,41 @@ def _patch_agent_streaming(agent):
|
|
|
201
201
|
model_, effective_response_format = _get_bound_model(request)
|
|
202
202
|
messages = request.messages
|
|
203
203
|
|
|
204
|
-
# 🔑 根治摘要泄漏:将 lc_source="summarization" 的 HumanMessage
|
|
204
|
+
# 🔑 根治摘要泄漏:将 lc_source="summarization" 的 HumanMessage 内容
|
|
205
|
+
# 注入到 system_message 而非直接丢弃,保持记忆连续性。
|
|
205
206
|
# 根因分析(2026-06-06 端到端测试确认):
|
|
206
|
-
# 1. SummarizationMiddleware
|
|
207
|
-
# 2.
|
|
208
|
-
#
|
|
209
|
-
#
|
|
210
|
-
#
|
|
211
|
-
|
|
212
|
-
# 能捕获 HumanMessage,但模型自己输出的 AIMessageChunk 无法过滤)
|
|
213
|
-
# 修复策略:从模型输入中完全移除摘要 HumanMessage,不注入任何形式的摘要内容
|
|
214
|
-
# 摘要仍保留在 LangGraph _summarization_event 状态中,供后续压缩轮次使用
|
|
207
|
+
# 1. SummarizationMiddleware 将摘要注入为 HumanMessage
|
|
208
|
+
# 2. 模型看到 HumanMessage 后容易将其作为对话内容回显/复述
|
|
209
|
+
# 3. 之前完全移除摘要导致压缩后模型丢失所有记忆
|
|
210
|
+
# 修复策略:提取摘要内容 → 注入 SystemMessage(模型视其为指令/背景知识,
|
|
211
|
+
# 回显概率远低于 HumanMessage)→ 从 messages 中移除原始 HumanMessage
|
|
212
|
+
_summary_text = None
|
|
215
213
|
_filtered_messages = []
|
|
216
214
|
for _msg in messages:
|
|
217
215
|
if (isinstance(_msg, HumanMessage)
|
|
218
216
|
and getattr(_msg, "additional_kwargs", {}).get("lc_source") == "summarization"):
|
|
219
|
-
|
|
217
|
+
_raw = _msg.content or ""
|
|
218
|
+
# 去掉 <internal_context_data> 包装标签,提取纯摘要
|
|
219
|
+
_summary_text = re.sub(
|
|
220
|
+
r'</?internal_context_data>', '', _raw, flags=re.DOTALL
|
|
221
|
+
).strip()
|
|
222
|
+
SYLogger.debug("[DeepAgent] 摘要已从 HumanMessage 提取,将注入 system_message")
|
|
220
223
|
else:
|
|
221
224
|
_filtered_messages.append(_msg)
|
|
222
225
|
messages = _filtered_messages
|
|
223
226
|
|
|
227
|
+
if _summary_text and request.system_message:
|
|
228
|
+
from deepagents.middleware._utils import append_to_system_message
|
|
229
|
+
_summary_directive = (
|
|
230
|
+
"\n\n<system_context>\n"
|
|
231
|
+
"以下是之前对话历史的压缩摘要,作为你的内部记忆使用。"
|
|
232
|
+
"把它当作你自己的回忆,绝对不要在回复中重复、复述或引用此内容的任何部分。\n"
|
|
233
|
+
f"{_summary_text}\n"
|
|
234
|
+
"</system_context>"
|
|
235
|
+
)
|
|
236
|
+
_new_sys = append_to_system_message(request.system_message, _summary_directive)
|
|
237
|
+
request = request.override(system_message=_new_sys)
|
|
238
|
+
|
|
224
239
|
if request.system_message:
|
|
225
240
|
messages = [request.system_message, *messages]
|
|
226
241
|
|
|
@@ -621,6 +636,19 @@ class DeepAgent:
|
|
|
621
636
|
else:
|
|
622
637
|
content = raw_content or ""
|
|
623
638
|
|
|
639
|
+
# 🔑 Defense 3: 清理 AI 输出中的摘要泄漏标签(安全网)
|
|
640
|
+
# 即使摘要已注入 SystemMessage,模型仍可能在极少数情况下回显标签
|
|
641
|
+
if msg_type in ("AIMessage", "AIMessageChunk") and content:
|
|
642
|
+
for _pat in [
|
|
643
|
+
r'<internal_context_data>.*?</internal_context_data>',
|
|
644
|
+
r'<compressed_history>.*?</compressed_history>',
|
|
645
|
+
r'<system_context>.*?</system_context>',
|
|
646
|
+
]:
|
|
647
|
+
if re.search(_pat, content, re.DOTALL):
|
|
648
|
+
content = re.sub(_pat, '', content, flags=re.DOTALL)
|
|
649
|
+
SYLogger.warning("[DeepAgent] AI 输出包含摘要泄漏标签,已清理")
|
|
650
|
+
content = content.strip()
|
|
651
|
+
|
|
624
652
|
if msg_type in ("AIMessage", "AIMessageChunk"):
|
|
625
653
|
# 🔑 提取 reasoning_content(思考/推理内容)
|
|
626
654
|
# 模型在 thinking 模式下会将推理过程放在 reasoning_content 字段,
|
|
@@ -182,9 +182,10 @@ _orig_build_new_messages = _OrigDeepAgentsSumm._build_new_messages_with_path
|
|
|
182
182
|
def _patched_build_new_messages(self, summary, file_path):
|
|
183
183
|
content = (
|
|
184
184
|
"<internal_context_data>\n"
|
|
185
|
-
"
|
|
186
|
-
"
|
|
187
|
-
"
|
|
185
|
+
"[系统内部记忆]\n"
|
|
186
|
+
"这是你的内部记忆,帮助你回忆之前的对话。"
|
|
187
|
+
"把它当作你自己的回忆,而不是要输出的内容。"
|
|
188
|
+
"绝对不要在回复中提及、复述或引用此内容的任何部分。\n\n"
|
|
188
189
|
)
|
|
189
190
|
if file_path is not None:
|
|
190
191
|
content += (
|
{sycommon_python_lib-0.2.5a35 → sycommon_python_lib-0.2.5a36}/src/sycommon/middleware/traceid.py
RENAMED
|
@@ -40,10 +40,7 @@ def setup_trace_id_handler(app):
|
|
|
40
40
|
request_body = json.loads(raw_text)
|
|
41
41
|
else:
|
|
42
42
|
request_body = await request.json()
|
|
43
|
-
# 截断过大的 JSON body(如包含 base64 文件内容的请求)
|
|
44
43
|
body_str = json.dumps(request_body, ensure_ascii=False)
|
|
45
|
-
if len(body_str) > 5000:
|
|
46
|
-
request_body = {"_truncated": f"请求体 {len(body_str)} 字节,已省略"}
|
|
47
44
|
except Exception:
|
|
48
45
|
try:
|
|
49
46
|
request_body = await request.json()
|
|
@@ -74,7 +74,6 @@ class RabbitMQClient:
|
|
|
74
74
|
|
|
75
75
|
# 并发控制
|
|
76
76
|
self._connect_lock = asyncio.Lock()
|
|
77
|
-
self._reconnect_semaphore = asyncio.Semaphore(1)
|
|
78
77
|
|
|
79
78
|
# 异步任务并发控制(方案C:收到即ACK + create_task,复用 prefetch_count)
|
|
80
79
|
self.prefetch_count = kwargs.get('prefetch_count', 2)
|
|
@@ -235,9 +234,8 @@ class RabbitMQClient:
|
|
|
235
234
|
# 不符合命名规范或无队列名,清空队列引用
|
|
236
235
|
self._queue = None
|
|
237
236
|
|
|
238
|
-
async def
|
|
239
|
-
"""
|
|
240
|
-
# 1. 取消正在运行的后台 handler 任务
|
|
237
|
+
async def _cleanup_running_tasks(self) -> None:
|
|
238
|
+
"""仅清理后台 handler 任务(不做任何破坏性清理,不调 queue.cancel、不关通道)"""
|
|
241
239
|
if self._running_tasks:
|
|
242
240
|
for t in list(self._running_tasks):
|
|
243
241
|
if not t.done():
|
|
@@ -252,37 +250,8 @@ class RabbitMQClient:
|
|
|
252
250
|
pass
|
|
253
251
|
self._running_tasks.clear()
|
|
254
252
|
|
|
255
|
-
# 2. 清理连接关闭回调(移除对 self/loop 的引用)
|
|
256
|
-
if self._channel_conn:
|
|
257
|
-
try:
|
|
258
|
-
if self._channel_conn.close_callbacks:
|
|
259
|
-
self._channel_conn.close_callbacks.clear()
|
|
260
|
-
except Exception:
|
|
261
|
-
pass
|
|
262
|
-
|
|
263
|
-
# 3. 停止消费
|
|
264
|
-
try:
|
|
265
|
-
if self._consumer_tag and self._queue:
|
|
266
|
-
await self._queue.cancel(self._consumer_tag)
|
|
267
|
-
except Exception:
|
|
268
|
-
pass
|
|
269
|
-
|
|
270
|
-
# 4. 关闭旧通道
|
|
271
|
-
if self._channel and not self._channel.is_closed:
|
|
272
|
-
try:
|
|
273
|
-
await self._channel.close()
|
|
274
|
-
except Exception:
|
|
275
|
-
pass
|
|
276
|
-
|
|
277
|
-
# 5. 置空所有引用
|
|
278
|
-
self._channel = None
|
|
279
|
-
self._channel_conn = None
|
|
280
|
-
self._exchange = None
|
|
281
|
-
self._queue = None
|
|
282
|
-
self._consumer_tag = None
|
|
283
|
-
|
|
284
253
|
async def connect(self) -> None:
|
|
285
|
-
"""连接方法"""
|
|
254
|
+
"""连接方法 — 信任 aio-pika Robust 自动恢复,不注册 on_conn_closed"""
|
|
286
255
|
if self._closed:
|
|
287
256
|
raise RuntimeError("客户端已关闭,无法重新连接")
|
|
288
257
|
|
|
@@ -296,31 +265,17 @@ class RabbitMQClient:
|
|
|
296
265
|
was_consuming = self._consumer_tag is not None
|
|
297
266
|
|
|
298
267
|
try:
|
|
299
|
-
#
|
|
300
|
-
await self.
|
|
301
|
-
|
|
302
|
-
# 2. 获取新资源
|
|
303
|
-
self._channel, self._channel_conn = await self.connection_pool.acquire_channel()
|
|
304
|
-
|
|
305
|
-
# 3. 设置连接关闭回调
|
|
306
|
-
loop = asyncio.get_running_loop()
|
|
268
|
+
# 仅清理后台 handler 任务(不调 queue.cancel、不关通道、不清回调)
|
|
269
|
+
await self._cleanup_running_tasks()
|
|
307
270
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
except RuntimeError:
|
|
317
|
-
pass
|
|
318
|
-
|
|
319
|
-
if self._channel_conn:
|
|
320
|
-
self._channel_conn.close_callbacks.add(on_conn_closed)
|
|
321
|
-
|
|
322
|
-
# 4. 重建 Exchange/Queue
|
|
323
|
-
await self._rebuild_resources()
|
|
271
|
+
# 如果已有通道且未关闭,直接复用(aio-pika Robust 自动恢复的)
|
|
272
|
+
if self._channel and not self._channel.is_closed:
|
|
273
|
+
# 通道还活着,只需重建 exchange/queue 绑定
|
|
274
|
+
await self._rebuild_resources()
|
|
275
|
+
else:
|
|
276
|
+
# 通道不可用,从连接池获取新通道
|
|
277
|
+
self._channel, self._channel_conn = await self.connection_pool.acquire_channel()
|
|
278
|
+
await self._rebuild_resources()
|
|
324
279
|
|
|
325
280
|
except Exception as e:
|
|
326
281
|
logger.error(f"客户端连接失败: {str(e)}", exc_info=True)
|
|
@@ -329,7 +284,7 @@ class RabbitMQClient:
|
|
|
329
284
|
self._queue = None
|
|
330
285
|
raise
|
|
331
286
|
|
|
332
|
-
#
|
|
287
|
+
# 恢复消费
|
|
333
288
|
if was_consuming and self._message_handler:
|
|
334
289
|
if self._queue:
|
|
335
290
|
logger.info("🔄 检测到重连前处于消费状态,尝试自动恢复消费...")
|
|
@@ -341,41 +296,6 @@ class RabbitMQClient:
|
|
|
341
296
|
else:
|
|
342
297
|
logger.warning("⚠️ 队列对象无效,暂缓恢复消费,等待监控器兜底")
|
|
343
298
|
|
|
344
|
-
async def _safe_reconnect(self):
|
|
345
|
-
"""安全重连任务(不限制重试次数,由连接监控器兜底)
|
|
346
|
-
|
|
347
|
-
内存安全保证:
|
|
348
|
-
- 每次重试前通过 connect() -> _cleanup_before_reconnect() 彻底清理旧资源
|
|
349
|
-
- _cleanup_before_reconnect 会取消后台任务、关闭旧通道、清除回调引用
|
|
350
|
-
- connect() 持有 _connect_lock 保证不会并发创建重复资源
|
|
351
|
-
- 拉长失败间隔,避免频繁重连累积未清理的资源
|
|
352
|
-
"""
|
|
353
|
-
async with self._reconnect_semaphore:
|
|
354
|
-
if self._closed or await self.is_connected:
|
|
355
|
-
return
|
|
356
|
-
logger.info("触发后台安全重连...")
|
|
357
|
-
attempt = 0
|
|
358
|
-
while not self._closed:
|
|
359
|
-
if await self.is_connected:
|
|
360
|
-
return
|
|
361
|
-
attempt += 1
|
|
362
|
-
try:
|
|
363
|
-
# 前5次间隔5秒,之后每5次拉长到30秒,避免频繁创建/销毁资源
|
|
364
|
-
if attempt <= 5:
|
|
365
|
-
await asyncio.sleep(5)
|
|
366
|
-
else:
|
|
367
|
-
logger.info(f"已连续失败 {attempt} 次,等待30秒后继续...")
|
|
368
|
-
await asyncio.sleep(30)
|
|
369
|
-
|
|
370
|
-
# connect() 内部会先调用 _cleanup_before_reconnect() 清理旧资源
|
|
371
|
-
# 确保不会累积未关闭的通道/回调/任务
|
|
372
|
-
await self.connect()
|
|
373
|
-
if await self.is_connected:
|
|
374
|
-
return
|
|
375
|
-
except Exception as e:
|
|
376
|
-
logger.warning(
|
|
377
|
-
f"后台重连尝试 {attempt} 失败: {e}")
|
|
378
|
-
|
|
379
299
|
async def set_message_handler(self, handler: Callable) -> None:
|
|
380
300
|
if not callable(handler):
|
|
381
301
|
raise TypeError("消息处理器必须是可调用对象")
|
|
@@ -28,7 +28,8 @@ class RabbitMQClientManager(RabbitMQCoreService):
|
|
|
28
28
|
|
|
29
29
|
@classmethod
|
|
30
30
|
async def _clean_client_resources(cls, client: RabbitMQClient) -> None:
|
|
31
|
-
"""
|
|
31
|
+
"""清理客户端资源 — 不做破坏性清理(不调 stop_consuming/queue.cancel、不清 close_callbacks)
|
|
32
|
+
信任 aio-pika Robust 自动恢复机制,只清理后台任务和置空引用。"""
|
|
32
33
|
# 1. 取消正在运行的后台 handler 任务
|
|
33
34
|
if client._running_tasks:
|
|
34
35
|
for t in list(client._running_tasks):
|
|
@@ -43,29 +44,7 @@ class RabbitMQClientManager(RabbitMQCoreService):
|
|
|
43
44
|
pass
|
|
44
45
|
client._running_tasks.clear()
|
|
45
46
|
|
|
46
|
-
# 2.
|
|
47
|
-
if client._channel_conn:
|
|
48
|
-
try:
|
|
49
|
-
if client._channel_conn.close_callbacks:
|
|
50
|
-
client._channel_conn.close_callbacks.clear()
|
|
51
|
-
except Exception:
|
|
52
|
-
pass
|
|
53
|
-
|
|
54
|
-
# 3. 停止消费
|
|
55
|
-
try:
|
|
56
|
-
if client._consumer_tag:
|
|
57
|
-
await client.stop_consuming()
|
|
58
|
-
except Exception as e:
|
|
59
|
-
logger.warning(f"停止消费逻辑异常: {str(e)}")
|
|
60
|
-
|
|
61
|
-
# 4. 关闭通道
|
|
62
|
-
if client._channel and not client._channel.is_closed:
|
|
63
|
-
try:
|
|
64
|
-
await client._channel.close()
|
|
65
|
-
except Exception as e:
|
|
66
|
-
logger.warning(f"关闭通道异常: {str(e)}")
|
|
67
|
-
|
|
68
|
-
# 5. 置空所有引用
|
|
47
|
+
# 2. 置空引用(不调 queue.cancel、不关通道、不清 close_callbacks)
|
|
69
48
|
client._channel = None
|
|
70
49
|
client._channel_conn = None
|
|
71
50
|
client._exchange = None
|
|
@@ -16,7 +16,8 @@ class RabbitMQConnectionMonitor(RabbitMQClientManager):
|
|
|
16
16
|
|
|
17
17
|
@classmethod
|
|
18
18
|
async def _monitor_connections(cls):
|
|
19
|
-
"""连接监控任务:定期检查所有客户端连接状态和消费者健康
|
|
19
|
+
"""连接监控任务:定期检查所有客户端连接状态和消费者健康
|
|
20
|
+
信任 aio-pika Robust 自动恢复,Monitor 只做兜底检测+安全重启。"""
|
|
20
21
|
logger.info("RabbitMQ连接监控任务启动")
|
|
21
22
|
while not cls._is_shutdown:
|
|
22
23
|
try:
|
|
@@ -43,20 +44,22 @@ class RabbitMQConnectionMonitor(RabbitMQClientManager):
|
|
|
43
44
|
# 检查所有客户端连接
|
|
44
45
|
for client_name, client in list(cls._clients.items()):
|
|
45
46
|
try:
|
|
46
|
-
#
|
|
47
|
+
# 跳过正在重连的客户端
|
|
47
48
|
if client_name in cls._reconnect_tasks:
|
|
48
49
|
continue
|
|
49
50
|
|
|
50
51
|
client_connected = await client.is_connected
|
|
52
|
+
|
|
53
|
+
# 连接断开 → 尝试重连(不做破坏性清理)
|
|
51
54
|
if not client_connected:
|
|
52
55
|
logger.warning(
|
|
53
|
-
f"客户端 '{client_name}'
|
|
56
|
+
f"客户端 '{client_name}' 连接异常,尝试重连")
|
|
54
57
|
task = asyncio.create_task(
|
|
55
58
|
cls._reconnect_client_with_cleanup(client_name, client))
|
|
56
59
|
cls._reconnect_tasks[client_name] = task
|
|
57
60
|
continue
|
|
58
61
|
|
|
59
|
-
# 消费者健康检查:handler
|
|
62
|
+
# 消费者健康检查:handler存在但消费者丢失
|
|
60
63
|
if client._message_handler and client._consumer_tag is None:
|
|
61
64
|
logger.warning(
|
|
62
65
|
f"客户端 '{client_name}' 消费者丢失(handler存在但无consumer_tag),重新注册消费")
|
|
@@ -73,7 +76,7 @@ class RabbitMQConnectionMonitor(RabbitMQClientManager):
|
|
|
73
76
|
|
|
74
77
|
@classmethod
|
|
75
78
|
async def _restart_consumer_if_needed(cls, client_name: str):
|
|
76
|
-
"""
|
|
79
|
+
"""重启消费任务(修复假死问题:不仅看 task.done(),还要看 consumer_tag)"""
|
|
77
80
|
try:
|
|
78
81
|
from sycommon.rabbitmq.rabbitmq_service_consumer_manager import RabbitMQConsumerManager
|
|
79
82
|
|
|
@@ -81,16 +84,34 @@ class RabbitMQConnectionMonitor(RabbitMQClientManager):
|
|
|
81
84
|
if client_name not in RabbitMQConsumerManager._message_handlers:
|
|
82
85
|
return
|
|
83
86
|
|
|
84
|
-
#
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
# 检查消费任务状态
|
|
88
|
+
task_exists = client_name in RabbitMQConsumerManager._consumer_tasks
|
|
89
|
+
task = RabbitMQConsumerManager._consumer_tasks.get(client_name)
|
|
90
|
+
has_tag = client_name in RabbitMQConsumerManager._consumer_tags
|
|
91
|
+
|
|
92
|
+
# task 已结束 → 清理并重启
|
|
93
|
+
if task_exists and task.done():
|
|
94
|
+
del RabbitMQConsumerManager._consumer_tasks[client_name]
|
|
95
|
+
logger.info(f"消费者 '{client_name}' 任务已结束,重新创建")
|
|
96
|
+
await RabbitMQConsumerManager.start_consumer(client_name)
|
|
97
|
+
return
|
|
98
|
+
|
|
99
|
+
# task 还在运行但没有 consumer_tag → 假死!取消旧 task 并重启
|
|
100
|
+
if task_exists and not task.done() and not has_tag:
|
|
101
|
+
logger.warning(
|
|
102
|
+
f"消费者 '{client_name}' 检测到假死 (task运行中但无consumer_tag),强制取消并重启")
|
|
103
|
+
task.cancel()
|
|
104
|
+
try:
|
|
105
|
+
await asyncio.wait_for(task, timeout=5.0)
|
|
106
|
+
except (asyncio.TimeoutError, asyncio.CancelledError):
|
|
107
|
+
pass
|
|
108
|
+
del RabbitMQConsumerManager._consumer_tasks[client_name]
|
|
109
|
+
await RabbitMQConsumerManager.start_consumer(client_name)
|
|
110
|
+
logger.info(f"✅ 消费者 '{client_name}' 假死恢复完成")
|
|
111
|
+
return
|
|
112
|
+
|
|
113
|
+
# task 运行中且有 tag → 正常,无需处理
|
|
91
114
|
|
|
92
|
-
await RabbitMQConsumerManager.start_consumer(client_name)
|
|
93
|
-
logger.info(f"✅ 消费者 '{client_name}' 已重新注册")
|
|
94
115
|
except Exception as e:
|
|
95
116
|
logger.error(f"重启消费者 '{client_name}' 失败: {e}", exc_info=True)
|
|
96
117
|
|
|
@@ -177,34 +177,16 @@ class RabbitMQConsumerManager(RabbitMQClientManager):
|
|
|
177
177
|
logger.error(
|
|
178
178
|
f"消费者 '{client_name}' 发生异常: {str(e)}", exc_info=True)
|
|
179
179
|
finally:
|
|
180
|
-
#
|
|
180
|
+
# 清理 consumer tag 记录(不调 stop_consuming,不杀 RobustQueue._consumers)
|
|
181
181
|
if client_name in cls._consumer_tags:
|
|
182
182
|
del cls._consumer_tags[client_name]
|
|
183
|
-
|
|
184
|
-
try:
|
|
185
|
-
await client.stop_consuming()
|
|
186
|
-
except Exception:
|
|
187
|
-
pass
|
|
183
|
+
client._consumer_tag = None
|
|
188
184
|
logger.info(f"消费者 '{client_name}' 任务已结束")
|
|
189
185
|
|
|
190
186
|
task = asyncio.create_task(
|
|
191
187
|
consume_task(), name=f"consumer-{client_name}")
|
|
192
188
|
cls._consumer_tasks[client_name] = task
|
|
193
189
|
|
|
194
|
-
def task_done_callback(t: asyncio.Task) -> None:
|
|
195
|
-
try:
|
|
196
|
-
if t.done():
|
|
197
|
-
exc = t.exception()
|
|
198
|
-
if exc and not isinstance(exc, asyncio.CancelledError):
|
|
199
|
-
logger.error(f"消费者任务 '{client_name}' 异常结束: {exc}")
|
|
200
|
-
except asyncio.CancelledError:
|
|
201
|
-
pass
|
|
202
|
-
except Exception as e:
|
|
203
|
-
logger.error(f"回调处理异常: {e}")
|
|
204
|
-
|
|
205
|
-
task.add_done_callback(task_done_callback)
|
|
206
|
-
logger.info(f"消费者任务 '{client_name}' 已创建")
|
|
207
|
-
|
|
208
190
|
@classmethod
|
|
209
191
|
async def shutdown_consumers(cls, timeout: float = 15.0) -> None:
|
|
210
192
|
"""关闭所有消费者 (增强版:确保资源彻底释放)"""
|