sycommon-python-lib 0.2.7a51__tar.gz → 0.2.7a53__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.7a51 → sycommon_python_lib-0.2.7a53}/PKG-INFO +13 -13
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/pyproject.toml +13 -13
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/deep_agent.py +77 -272
- sycommon_python_lib-0.2.7a53/src/sycommon/agent/middleware/model_request_prep.py +139 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/multi_agent_team.py +9 -1
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/resume_compactor.py +24 -6
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/file_ops.py +84 -28
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/http_sandbox_backend.py +275 -93
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/sandbox.py +252 -56
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/sandbox.py +14 -2
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_upgrade_langgraph_stream.py +24 -15
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_upgrade_verification.py +32 -100
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/PKG-INFO +13 -13
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/SOURCES.txt +1 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/requires.txt +12 -12
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/README.md +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/setup.cfg +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/cli.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/core/console.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/core/models.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/core/project.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/core/utils.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/api/query.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/db/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/db/service.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/model/parse.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/.env.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/.gitignore.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/Dockerfile.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/app.yaml.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/model/file_info.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/requirements.txt.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/commands/hello.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/pyproject.toml.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/api/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/nexus/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/__main__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/acp/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/acp/config.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/acp/executor.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/acp/registry.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/acp/server.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/agents/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/agents/factory.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/agents/prompts.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/browser.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/console.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/dom.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/network.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/page_errors.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/performance.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/screenshot.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/client.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/protocol.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/repl.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cli.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/acp_cmd.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/cdp_cmd.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/chat_cmd.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/create_cmd.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/evaluate_cmd.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/init_cmd.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/memory_cmd.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/resume_cmd.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/rollback_cmd.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/run_cmd.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/backend.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/config.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/display.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/git_integration.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/llm.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/state.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/evaluate/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/evaluate/api_evaluator.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/compressor.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/full.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/hot.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/manager.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/warm.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/mode/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/mode/create.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/mode/optimize.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/models/config_models.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/baseline_tests.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/checkpoint.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/convergence.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/diagnosis.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/engine.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/environment.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/experience.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/harness_prompts.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/history.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/optimization_logger.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/pre_validation.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/reward.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/strategy_bandit.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/strategy_generator.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/strategy_prompts.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/simple_chat_agent.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/skills/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/acp/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/acp/client.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/acp/fetch.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/acp/ssh_init.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/acp/tool.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/agent_manager.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/chat_events.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/mcp/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/mcp/models.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/mcp/tool_loader.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/sandbox_path_guard.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/sensitive_guard.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/sitecustomize.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/skill_api_whitelist.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/skill_wl_check.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/skill_write_guard.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/reasoning_content_patch.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/consistent_hash.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/session.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/summarization_utils.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/ldap_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/oa_cache.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/oa_crypto.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/oa_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/wecom_ldap_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/ACPAgentConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/Config.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/DatabaseConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/ElasticsearchConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/EmbeddingConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/LLMConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/LangfuseConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/MQConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/PgConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/RedisConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/RerankerConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/SentryConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/SkillApiWhitelistConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/XxlJobConfig.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/config_change_notifier.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/async_base_db_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/async_database_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/base_db_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/database_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/elasticsearch_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/pg_checkpoint_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/redis_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/resilient_pg_saver.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/token_usage_db_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/health/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/health/health_check.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/health/metrics.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/health/ping.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/heartbeat_process/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/embedding.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/get_llm.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/llm_logger.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/llm_tokens.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/output_fixing_runnable.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/struct_token.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/sy_langfuse.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/token_usage_es_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/token_utils.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/usage_token.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/async_sql_logger.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/kafka_log.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/log_masker.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/logger_levels.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/logger_wrapper.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/process_logger.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/sql_logger.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/mcp_server/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/mcp_server/server.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/context.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/cors.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/docs.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/exception.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/middleware.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/monitor_memory.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/mq.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/timeout.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/token_tracking.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/tool_result_truncation.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/traceid.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/base_http.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/log.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/mcp_server_config.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/mqlistener_config.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/mqmsg_model.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/mqsend_config.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/sso_user.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/token_usage.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/token_usage_mysql.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/xxljob_handler_config.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/notice/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/notice/uvicorn_monitor.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/notice/wecom_message.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/sentry/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/sentry/sy_sentry.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/services.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/sse/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/sse/event.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/sse/sse.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/example.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/example2.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/feign.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/feign_client.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_client_base.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_config_manager.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_service_registration.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/param.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/deep_agent_server.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consistent_hash.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consume_dedup.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consumer_loss_rootcause.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consumer_recovery.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consumer_recovery_fix.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consumer_tags_sync.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_deep_agent.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_email.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_encoding_cache.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_exp_concurrent_migrate.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_exp_delete_queue_with_consumers.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_fault_injection_real.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_fix_verification.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_heartbeat_timeout.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_integration_real_broker.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_mcp_server.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_mq.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_mq_config_driven.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_oa_login.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_queue_priority_fallback.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_queue_priority_upgrade_timing.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_real_summarization.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_reconnect_scenarios.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_summarization_config.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_summarization_real.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_summary_leak_e2e.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_upgrade_aio_pika.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/async_utils.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/docs.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/env.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/merge_headers.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/snowflake.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/syemail.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/timing.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/xxljob/__init__.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/xxljob/xxljob_service.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_acp_tool.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_asyncio_logging.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_config_change_notifier.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_hotreload_snapshot.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_llm_apikey_contextvar.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_log_masker.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_resilient_pg_saver.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_sandbox_path_guard.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_sensitive_guard.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_simple_chat_agent.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_skill_regex_upgrade.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_skill_write_guard.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_sycli.py +0 -0
- {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_sync_skills_to_sandbox.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sycommon-python-lib
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.7a53
|
|
4
4
|
Summary: Add your description here
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -9,24 +9,24 @@ Requires-Dist: aiohttp==3.14.3
|
|
|
9
9
|
Requires-Dist: aiomysql==0.3.2
|
|
10
10
|
Requires-Dist: anyio==4.14.2
|
|
11
11
|
Requires-Dist: decorator==5.3.1
|
|
12
|
-
Requires-Dist: deepagents==0.
|
|
12
|
+
Requires-Dist: deepagents==0.7.1
|
|
13
13
|
Requires-Dist: elasticsearch==9.4.1
|
|
14
|
-
Requires-Dist: fastapi==0.
|
|
14
|
+
Requires-Dist: fastapi==0.141.1
|
|
15
15
|
Requires-Dist: jinja2==3.1.6
|
|
16
16
|
Requires-Dist: kafka-python==3.0.9
|
|
17
17
|
Requires-Dist: langchain==1.3.14
|
|
18
|
-
Requires-Dist: langchain-core==1.5.
|
|
18
|
+
Requires-Dist: langchain-core==1.5.3
|
|
19
19
|
Requires-Dist: langchain-openai==1.4.1
|
|
20
|
-
Requires-Dist: langfuse==4.14.
|
|
21
|
-
Requires-Dist: langgraph==1.2.
|
|
22
|
-
Requires-Dist: langgraph-checkpoint-postgres==3.1.
|
|
20
|
+
Requires-Dist: langfuse==4.14.2
|
|
21
|
+
Requires-Dist: langgraph==1.2.10
|
|
22
|
+
Requires-Dist: langgraph-checkpoint-postgres==3.1.1
|
|
23
23
|
Requires-Dist: langgraph-checkpoint-redis==0.5.1
|
|
24
24
|
Requires-Dist: ldap3==2.9.1
|
|
25
25
|
Requires-Dist: loguru==0.7.3
|
|
26
|
-
Requires-Dist: mysql-connector-python==
|
|
26
|
+
Requires-Dist: mysql-connector-python==26.7.0
|
|
27
27
|
Requires-Dist: nacos-sdk-python<3.0,==2.0.11
|
|
28
28
|
Requires-Dist: psutil==7.2.2
|
|
29
|
-
Requires-Dist: pyxxl==0.4.
|
|
29
|
+
Requires-Dist: pyxxl==0.4.8
|
|
30
30
|
Requires-Dist: pydantic==2.13.4
|
|
31
31
|
Requires-Dist: python-dotenv==1.2.2
|
|
32
32
|
Requires-Dist: python-multipart==0.0.32
|
|
@@ -36,14 +36,14 @@ Requires-Dist: sentry-sdk[fastapi]==2.66.1
|
|
|
36
36
|
Requires-Dist: sqlalchemy[asyncio]==2.0.51
|
|
37
37
|
Requires-Dist: starlette[full]==1.3.1
|
|
38
38
|
Requires-Dist: tiktoken==0.13.0
|
|
39
|
-
Requires-Dist: uvicorn==0.
|
|
39
|
+
Requires-Dist: uvicorn==0.52.1
|
|
40
40
|
Requires-Dist: wecom-aibot-python-sdk==1.0.2
|
|
41
|
-
Requires-Dist: twine==
|
|
41
|
+
Requires-Dist: twine==7.0.0
|
|
42
42
|
Requires-Dist: minio==7.2.20
|
|
43
|
-
Requires-Dist: langchain-mcp-adapters==0.3.
|
|
43
|
+
Requires-Dist: langchain-mcp-adapters==0.3.1
|
|
44
44
|
Requires-Dist: fastapi-mcp==0.4.0
|
|
45
45
|
Requires-Dist: psycopg[binary,pool]==3.3.4
|
|
46
|
-
Requires-Dist: agent-client-protocol==0.
|
|
46
|
+
Requires-Dist: agent-client-protocol==0.12.0
|
|
47
47
|
Requires-Dist: pypinyin==0.55.0
|
|
48
48
|
|
|
49
49
|
# sycommon-python-lib
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sycommon-python-lib"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.7a53"
|
|
4
4
|
description = "Add your description here"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -10,24 +10,24 @@ dependencies = [
|
|
|
10
10
|
"aiomysql==0.3.2",
|
|
11
11
|
"anyio==4.14.2",
|
|
12
12
|
"decorator==5.3.1",
|
|
13
|
-
"deepagents==0.
|
|
13
|
+
"deepagents==0.7.1",
|
|
14
14
|
"elasticsearch==9.4.1",
|
|
15
|
-
"fastapi==0.
|
|
15
|
+
"fastapi==0.141.1",
|
|
16
16
|
"jinja2==3.1.6",
|
|
17
17
|
"kafka-python==3.0.9",
|
|
18
18
|
"langchain==1.3.14",
|
|
19
|
-
"langchain-core==1.5.
|
|
19
|
+
"langchain-core==1.5.3",
|
|
20
20
|
"langchain-openai==1.4.1",
|
|
21
|
-
"langfuse==4.14.
|
|
22
|
-
"langgraph==1.2.
|
|
23
|
-
"langgraph-checkpoint-postgres==3.1.
|
|
21
|
+
"langfuse==4.14.2",
|
|
22
|
+
"langgraph==1.2.10",
|
|
23
|
+
"langgraph-checkpoint-postgres==3.1.1",
|
|
24
24
|
"langgraph-checkpoint-redis==0.5.1",
|
|
25
25
|
"ldap3==2.9.1",
|
|
26
26
|
"loguru==0.7.3",
|
|
27
|
-
"mysql-connector-python==
|
|
27
|
+
"mysql-connector-python==26.7.0",
|
|
28
28
|
"nacos-sdk-python==2.0.11,<3.0",
|
|
29
29
|
"psutil==7.2.2",
|
|
30
|
-
"pyxxl==0.4.
|
|
30
|
+
"pyxxl==0.4.8",
|
|
31
31
|
"pydantic==2.13.4",
|
|
32
32
|
"python-dotenv==1.2.2",
|
|
33
33
|
"python-multipart==0.0.32",
|
|
@@ -37,14 +37,14 @@ dependencies = [
|
|
|
37
37
|
"sqlalchemy[asyncio]==2.0.51",
|
|
38
38
|
"starlette[full]==1.3.1",
|
|
39
39
|
"tiktoken==0.13.0",
|
|
40
|
-
"uvicorn==0.
|
|
40
|
+
"uvicorn==0.52.1",
|
|
41
41
|
"wecom-aibot-python-sdk==1.0.2",
|
|
42
|
-
"twine==
|
|
42
|
+
"twine==7.0.0",
|
|
43
43
|
"minio==7.2.20",
|
|
44
|
-
"langchain-mcp-adapters==0.3.
|
|
44
|
+
"langchain-mcp-adapters==0.3.1",
|
|
45
45
|
"fastapi-mcp==0.4.0",
|
|
46
46
|
"psycopg[binary,pool]==3.3.4",
|
|
47
|
-
"agent-client-protocol==0.
|
|
47
|
+
"agent-client-protocol==0.12.0",
|
|
48
48
|
"pypinyin==0.55.0",
|
|
49
49
|
]
|
|
50
50
|
|
{sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/deep_agent.py
RENAMED
|
@@ -60,6 +60,7 @@ from sycommon.middleware.tool_result_truncation import ToolResultTruncationMiddl
|
|
|
60
60
|
from sycommon.agent.middleware.skill_write_guard import SkillWriteGuardMiddleware
|
|
61
61
|
from sycommon.agent.middleware.sandbox_path_guard import SandboxPathGuardMiddleware
|
|
62
62
|
from sycommon.agent.middleware.sensitive_guard import SensitiveGuardMiddleware
|
|
63
|
+
from sycommon.agent.middleware.model_request_prep import ModelRequestPrepMiddleware
|
|
63
64
|
from deepagents.middleware.summarization import create_summarization_tool_middleware # noqa: F401 保留 re-export
|
|
64
65
|
from sycommon.agent.summarization_utils import build_summarization_middleware
|
|
65
66
|
from sycommon.agent.resume_compactor import maybe_compact_before_resume
|
|
@@ -80,265 +81,6 @@ if TYPE_CHECKING:
|
|
|
80
81
|
from langchain.agents.middleware.types import AgentState, ContextT, ModelRequest, ModelResponse, ResponseT
|
|
81
82
|
from langgraph.runtime import Runtime
|
|
82
83
|
|
|
83
|
-
|
|
84
|
-
def _patch_agent_streaming(agent):
|
|
85
|
-
"""Monkey-patch factory.py _execute_model_async to fix stream_mode="messages".
|
|
86
|
-
|
|
87
|
-
根因: langchain factory.py (<=1.3.2) 的 _execute_model_async 有两个问题:
|
|
88
|
-
1. 调用 model_.ainvoke(messages) 不传 config → callbacks 不传播
|
|
89
|
-
2. 使用 ainvoke (非流式) 而非 astream → on_llm_new_token 不触发
|
|
90
|
-
|
|
91
|
-
修复: 替换 amodel_node 闭包中的 _execute_model_async, 改用 astream 并传入
|
|
92
|
-
从 ContextVar 读取的 config。astream 每个 token 触发 on_llm_new_token,
|
|
93
|
-
StreamMessagesHandler 拦截后推送给 stream_mode="messages" 的消费者。
|
|
94
|
-
|
|
95
|
-
为什么是最内层替换(而非 Middleware): _execute_model_async 位于所有中间件
|
|
96
|
-
(含 deepagents tail 的 MemoryMiddleware/FilesystemMiddleware 等会 modify_request
|
|
97
|
-
的 awrap_model_call)的最内层。替换它不绕过任何中间件; 用 Middleware 方案则只能
|
|
98
|
-
插在"用户中间件"层, 会绕过更内层的 MemoryMiddleware 注入。故保留 monkey-patch。
|
|
99
|
-
|
|
100
|
-
加固: 闭包结构按"自由变量名"定位 cell(不依赖固定索引), 任一不符即跳过 patch
|
|
101
|
-
并降级为非流式(功能正常, 只是不逐 token 推送), 而非打错补丁导致静默失效。
|
|
102
|
-
|
|
103
|
-
TODO: 等官方修复 (langchain >1.3.x, _execute_model_async 改用 astream) 后
|
|
104
|
-
删除此函数及调用即可。
|
|
105
|
-
"""
|
|
106
|
-
# 已验证兼容的版本范围(超出仅警告, 不阻断 —— 闭包强校验是真正的安全网)
|
|
107
|
-
# 1.3.10/1.3.11/1.3.12/1.3.13 + langchain_core 1.4.8/1.4.9 确认闭包结构兼容
|
|
108
|
-
# (factory.py 在 1.3.12→1.3.13 逐字节无变化 —— PyPI sdist diff 实证;
|
|
109
|
-
# amodel_node freevars 含 _execute_model_async, 内层 freevars 含
|
|
110
|
-
# _get_bound_model/_handle_model_output), patch 正常生效。
|
|
111
|
-
# 1.3.13 的 _execute_model_async 仍为 ainvoke + 不传 config (factory.py:1467),
|
|
112
|
-
# 官方仍未修复, 补丁仍需保留。
|
|
113
|
-
_VERIFIED = {"langchain": "1.3.13", "langchain_core": "1.4.9"}
|
|
114
|
-
try:
|
|
115
|
-
import langchain as _lc
|
|
116
|
-
import langchain_core as _lcc
|
|
117
|
-
_cur = {"langchain": getattr(_lc, "__version__", "?"),
|
|
118
|
-
"langchain_core": getattr(_lcc, "__version__", "?")}
|
|
119
|
-
if _cur != _VERIFIED:
|
|
120
|
-
SYLogger.warning(
|
|
121
|
-
f"[StreamingPatch] langchain 版本 {_cur} 与已验证 {_VERIFIED} 不一致; "
|
|
122
|
-
f"闭包强校验仍会兜底, 但建议复核 _execute_model_async 是否已改用 astream")
|
|
123
|
-
except Exception:
|
|
124
|
-
pass
|
|
125
|
-
|
|
126
|
-
try:
|
|
127
|
-
from langchain_core.messages import AIMessageChunk as _AIC, AIMessage as _AIM
|
|
128
|
-
from langchain_core.runnables.config import var_child_runnable_config
|
|
129
|
-
|
|
130
|
-
node = agent.nodes.get("model")
|
|
131
|
-
if node is None:
|
|
132
|
-
SYLogger.warning(
|
|
133
|
-
"[DeepAgent] model node not found, skip streaming patch")
|
|
134
|
-
return
|
|
135
|
-
|
|
136
|
-
inner = node.node # RunnableSeq
|
|
137
|
-
if not hasattr(inner, 'steps') or not inner.steps:
|
|
138
|
-
SYLogger.warning(
|
|
139
|
-
"[DeepAgent] model node has no steps, skip streaming patch")
|
|
140
|
-
return
|
|
141
|
-
|
|
142
|
-
# RunnableCallable(trace=False, afunc=amodel_node)
|
|
143
|
-
step0 = inner.steps[0]
|
|
144
|
-
afunc = getattr(step0, "afunc", None) # amodel_node
|
|
145
|
-
if afunc is None or afunc.__closure__ is None:
|
|
146
|
-
SYLogger.warning(
|
|
147
|
-
"[DeepAgent] amodel_node afunc/closure 缺失, skip streaming patch")
|
|
148
|
-
return
|
|
149
|
-
|
|
150
|
-
# ---- 按自由变量名定位 cell(不依赖固定索引)----
|
|
151
|
-
def _cell_by_name(fn, name):
|
|
152
|
-
"""从闭包函数 fn 中按 co_freevars 名取出对应 cell 对象(取不到返回 None)。"""
|
|
153
|
-
names = fn.__code__.co_freevars
|
|
154
|
-
if name not in names or fn.__closure__ is None:
|
|
155
|
-
return None
|
|
156
|
-
return fn.__closure__[names.index(name)]
|
|
157
|
-
|
|
158
|
-
exec_cell = _cell_by_name(afunc, "_execute_model_async")
|
|
159
|
-
if exec_cell is None:
|
|
160
|
-
SYLogger.warning(
|
|
161
|
-
f"[DeepAgent] amodel_node 闭包未含 _execute_model_async "
|
|
162
|
-
f"(freevars={afunc.__code__.co_freevars}), skip streaming patch")
|
|
163
|
-
return
|
|
164
|
-
|
|
165
|
-
original_execute = exec_cell.cell_contents
|
|
166
|
-
# 强校验 _execute_model_async 自身的闭包含预期三个自由变量
|
|
167
|
-
_gbm_cell = _cell_by_name(original_execute, "_get_bound_model")
|
|
168
|
-
_hmo_cell = _cell_by_name(original_execute, "_handle_model_output")
|
|
169
|
-
_name_cell = _cell_by_name(original_execute, "name")
|
|
170
|
-
if _gbm_cell is None or _hmo_cell is None:
|
|
171
|
-
SYLogger.warning(
|
|
172
|
-
f"[DeepAgent] _execute_model_async 闭包结构不符 "
|
|
173
|
-
f"(freevars={getattr(original_execute, '__code__', None) and original_execute.__code__.co_freevars}), "
|
|
174
|
-
f"skip streaming patch(降级为非流式,功能正常)")
|
|
175
|
-
return
|
|
176
|
-
_get_bound_model = _gbm_cell.cell_contents
|
|
177
|
-
_handle_model_output = _hmo_cell.cell_contents
|
|
178
|
-
_name = _name_cell.cell_contents if _name_cell is not None else None
|
|
179
|
-
|
|
180
|
-
def _clamp_max_tokens_for_model(model_, messages):
|
|
181
|
-
"""在 raw_model 上执行 _clamp_max_tokens 逻辑。
|
|
182
|
-
|
|
183
|
-
由于 create_deep_agent 提取了 raw_model(绕过了 LLMWithTokenTracking 包装),
|
|
184
|
-
原本在 LLMWithTokenTracking._agenerate 中自动执行的 _clamp_max_tokens 被跳过,
|
|
185
|
-
导致 max_tokens 不随 input tokens 动态调整,当 input + max_output > context_window
|
|
186
|
-
时触发 400 错误。此函数补上这一逻辑。
|
|
187
|
-
|
|
188
|
-
注意:_get_bound_model 返回的可能是 _ChatModelBinding(RunnableBindingBase 子类),
|
|
189
|
-
需要通过 .bound 取到真正的 ChatOpenAI,否则 max_tokens 只设在 wrapper 上不生效。
|
|
190
|
-
"""
|
|
191
|
-
from sycommon.config.LLMConfig import LLMConfig
|
|
192
|
-
from sycommon.config.Config import Config
|
|
193
|
-
from sycommon.llm.token_utils import clamp_max_tokens
|
|
194
|
-
try:
|
|
195
|
-
# 解包 binding wrapper,取到真正的 ChatModel
|
|
196
|
-
raw_model = getattr(model_, 'bound', model_)
|
|
197
|
-
llm_config = Config().get_llm_config(getattr(raw_model, 'model', None))
|
|
198
|
-
if not llm_config:
|
|
199
|
-
return
|
|
200
|
-
llm_cfg = LLMConfig(**llm_config)
|
|
201
|
-
max_tokens_limit = getattr(llm_cfg, 'maxTokens', None)
|
|
202
|
-
if not max_tokens_limit:
|
|
203
|
-
return
|
|
204
|
-
max_output = getattr(raw_model, 'max_tokens', None)
|
|
205
|
-
if not max_output:
|
|
206
|
-
return
|
|
207
|
-
dynamic_max = clamp_max_tokens(
|
|
208
|
-
raw_model, messages,
|
|
209
|
-
context_window=max_tokens_limit,
|
|
210
|
-
max_output_tokens=max_output,
|
|
211
|
-
)
|
|
212
|
-
SYLogger.debug(
|
|
213
|
-
f"[StreamingPatch] clamp max_tokens: "
|
|
214
|
-
f"context={max_tokens_limit}, max_output={max_output} → {dynamic_max}")
|
|
215
|
-
except Exception as e:
|
|
216
|
-
SYLogger.warning(
|
|
217
|
-
f"[StreamingPatch] clamp max_tokens failed: {e}")
|
|
218
|
-
|
|
219
|
-
async def _patched_execute_model_async(request):
|
|
220
|
-
"""替代 factory._execute_model_async: 用 astream + config 实现流式回调。"""
|
|
221
|
-
from langchain.agents.middleware.types import ModelResponse
|
|
222
|
-
|
|
223
|
-
SYLogger.warning(
|
|
224
|
-
f"[STREAM-DEBUG] _patched_execute_model_async ENTERED | "
|
|
225
|
-
f"messages={len(request.messages)} 条 | "
|
|
226
|
-
f"has_system={bool(request.system_message)}")
|
|
227
|
-
model_, effective_response_format = _get_bound_model(request)
|
|
228
|
-
messages = request.messages
|
|
229
|
-
|
|
230
|
-
# 🔑 根治摘要泄漏:将 lc_source="summarization" 的 HumanMessage 内容
|
|
231
|
-
# 注入到 system_message 而非直接丢弃,保持记忆连续性。
|
|
232
|
-
# 根因分析(2026-06-06 端到端测试确认):
|
|
233
|
-
# 1. SummarizationMiddleware 将摘要注入为 HumanMessage
|
|
234
|
-
# 2. 模型看到 HumanMessage 后容易将其作为对话内容回显/复述
|
|
235
|
-
# 3. 之前完全移除摘要导致压缩后模型丢失所有记忆
|
|
236
|
-
# 修复策略:提取摘要内容 → 注入 SystemMessage(模型视其为指令/背景知识,
|
|
237
|
-
# 回显概率远低于 HumanMessage)→ 从 messages 中移除原始 HumanMessage
|
|
238
|
-
_summary_text = None
|
|
239
|
-
_filtered_messages = []
|
|
240
|
-
for _msg in messages:
|
|
241
|
-
if (isinstance(_msg, HumanMessage)
|
|
242
|
-
and getattr(_msg, "additional_kwargs", {}).get("lc_source") == "summarization"):
|
|
243
|
-
_raw = _msg.content or ""
|
|
244
|
-
# 去掉 <internal_context_data> 包装标签,提取纯摘要
|
|
245
|
-
_summary_text = re.sub(
|
|
246
|
-
r'</?internal_context_data>', '', _raw, flags=re.DOTALL
|
|
247
|
-
).strip()
|
|
248
|
-
SYLogger.debug(
|
|
249
|
-
"[DeepAgent] 摘要已从 HumanMessage 提取,将注入 system_message")
|
|
250
|
-
else:
|
|
251
|
-
_filtered_messages.append(_msg)
|
|
252
|
-
messages = _filtered_messages
|
|
253
|
-
|
|
254
|
-
if _summary_text and request.system_message:
|
|
255
|
-
from deepagents.middleware._utils import append_to_system_message
|
|
256
|
-
_summary_directive = (
|
|
257
|
-
"\n\n<system_context>\n"
|
|
258
|
-
"以下是之前对话历史的压缩摘要,作为你的内部记忆使用。"
|
|
259
|
-
"把它当作你自己的回忆,绝对不要在回复中重复、复述或引用此内容的任何部分。\n"
|
|
260
|
-
f"{_summary_text}\n"
|
|
261
|
-
"</system_context>"
|
|
262
|
-
)
|
|
263
|
-
_new_sys = append_to_system_message(
|
|
264
|
-
request.system_message, _summary_directive)
|
|
265
|
-
request = request.override(system_message=_new_sys)
|
|
266
|
-
|
|
267
|
-
if request.system_message:
|
|
268
|
-
messages = [request.system_message, *messages]
|
|
269
|
-
|
|
270
|
-
# 动态调整 max_tokens,防止 input + max_output 超过上下文窗口
|
|
271
|
-
_clamp_max_tokens_for_model(model_, messages)
|
|
272
|
-
|
|
273
|
-
# 从 ContextVar 读取 LangGraph 注入的 config(含 StreamMessagesHandler)
|
|
274
|
-
config = var_child_runnable_config.get()
|
|
275
|
-
|
|
276
|
-
# 用 astream 替代 ainvoke, 每个 token 规发 on_llm_new_token
|
|
277
|
-
# 注意: ChatModel.astream() 产出的是 AIMessageChunk(BaseMessageChunk),
|
|
278
|
-
# 不是 ChatGenerationChunk,因此累加结果直接就是消息本身,没有 .message 属性。
|
|
279
|
-
import time as _t
|
|
280
|
-
_t0 = _t.monotonic()
|
|
281
|
-
_msg_count = len(messages) if hasattr(messages, '__len__') else -1
|
|
282
|
-
SYLogger.info(
|
|
283
|
-
f"[LLM-CALL] astream 开始: model={getattr(model_, 'model', '?')}, "
|
|
284
|
-
f"messages={_msg_count} 条")
|
|
285
|
-
chunks: list = []
|
|
286
|
-
_first_chunk_at = None
|
|
287
|
-
async for chunk in model_.astream(messages, config=config):
|
|
288
|
-
if _first_chunk_at is None:
|
|
289
|
-
_first_chunk_at = _t.monotonic()
|
|
290
|
-
SYLogger.info(
|
|
291
|
-
f"[LLM-CALL] 首个 chunk 到达, 耗时 {_first_chunk_at - _t0:.2f}s")
|
|
292
|
-
chunks.append(chunk)
|
|
293
|
-
|
|
294
|
-
if not chunks:
|
|
295
|
-
# astream 无产出时降级到原始 ainvoke(不走流式)
|
|
296
|
-
SYLogger.warning(
|
|
297
|
-
"[StreamingPatch] astream returned empty, fallback to ainvoke")
|
|
298
|
-
output = await model_.ainvoke(messages, config=config)
|
|
299
|
-
else:
|
|
300
|
-
SYLogger.info(
|
|
301
|
-
f"[LLM-CALL] astream 结束, 共 {len(chunks)} 个 chunk, "
|
|
302
|
-
f"总耗时 {_t.monotonic() - _t0:.2f}s")
|
|
303
|
-
generation = chunks[0]
|
|
304
|
-
for c in chunks[1:]:
|
|
305
|
-
generation += c
|
|
306
|
-
# astream 累加结果可能是 AIMessageChunk(多数情况)或包裹了 .message 的
|
|
307
|
-
# ChatGenerationChunk(少数自定义模型)。两种都兼容。
|
|
308
|
-
ai_message = getattr(generation, "message", generation)
|
|
309
|
-
if isinstance(ai_message, _AIC):
|
|
310
|
-
ai_message = _AIM(
|
|
311
|
-
content=ai_message.content,
|
|
312
|
-
additional_kwargs=ai_message.additional_kwargs,
|
|
313
|
-
tool_calls=ai_message.tool_calls,
|
|
314
|
-
usage_metadata=getattr(
|
|
315
|
-
ai_message, "usage_metadata", None),
|
|
316
|
-
response_metadata=getattr(
|
|
317
|
-
ai_message, "response_metadata", {}),
|
|
318
|
-
id=ai_message.id,
|
|
319
|
-
)
|
|
320
|
-
output = ai_message
|
|
321
|
-
|
|
322
|
-
if _name:
|
|
323
|
-
output.name = _name
|
|
324
|
-
|
|
325
|
-
handled_output = _handle_model_output(
|
|
326
|
-
output, effective_response_format)
|
|
327
|
-
return ModelResponse(
|
|
328
|
-
result=handled_output["messages"],
|
|
329
|
-
structured_response=handled_output.get("structured_response"),
|
|
330
|
-
)
|
|
331
|
-
|
|
332
|
-
# 替换闭包 cell → amodel_node 调用 patched 版本
|
|
333
|
-
exec_cell.cell_contents = _patched_execute_model_async
|
|
334
|
-
SYLogger.info(
|
|
335
|
-
f"[DeepAgent] _execute_model_async patched (astream + config) "
|
|
336
|
-
f"| langchain={_cur.get('langchain')} core={_cur.get('langchain_core')}")
|
|
337
|
-
|
|
338
|
-
except Exception as e:
|
|
339
|
-
SYLogger.warning(f"[DeepAgent] streaming patch failed: {e}")
|
|
340
|
-
|
|
341
|
-
|
|
342
84
|
@tool
|
|
343
85
|
def get_current_date() -> str:
|
|
344
86
|
"""获取当前日期时间"""
|
|
@@ -410,6 +152,13 @@ class AgentConfig(BaseModel):
|
|
|
410
152
|
scoped_skills_dir: Optional[str] = None
|
|
411
153
|
# 沙箱挂载点 scope,如 "shengye-platform/oa"。仅当 scoped_skills_dir 非空时生效。
|
|
412
154
|
scoped_skills_scope: Optional[str] = None
|
|
155
|
+
# 技能 ACL 白名单(仅 system 技能)。None=不过滤(向后兼容/平台 RPC/管理员);
|
|
156
|
+
# 非 None 时 _sync_skills_to_sandbox 只同步集合内的技能,并删除沙箱里
|
|
157
|
+
# 已存在但不在集合内的 system 技能(撤销已授权过的技能——沙箱 per-user 跨
|
|
158
|
+
# 会话持久,撤销必须主动删,否则 SkillsMiddleware 仍能 ls 到)。由应用层根据
|
|
159
|
+
# 数字员工 ACL 规则解析后注入。scoped/user 技能不受此字段约束
|
|
160
|
+
# (scoped 由服务端路由硬编码,user 由 MinIO 按 user 灌入)。
|
|
161
|
+
system_skills_allow: Optional[set[str]] = None
|
|
413
162
|
memory_dir: Optional[str] = None
|
|
414
163
|
|
|
415
164
|
@property
|
|
@@ -1280,11 +1029,11 @@ async def create_deep_agent(
|
|
|
1280
1029
|
)
|
|
1281
1030
|
|
|
1282
1031
|
# 🔑 提取底层 ChatOpenAI 原始模型
|
|
1283
|
-
#
|
|
1284
|
-
#
|
|
1285
|
-
#
|
|
1286
|
-
#
|
|
1287
|
-
#
|
|
1032
|
+
# deepagents/langchain factory 需要 BaseChatModel 才能 bind_tools(结构化输出 /
|
|
1033
|
+
# 工具调用),而 LLMWithTokenTracking 不是 BaseChatModel 子类(缺 bind_tools 等),
|
|
1034
|
+
# 故提取 raw_model。streaming=True 让 langchain-core 的 _should_stream 更早命中,
|
|
1035
|
+
# 配合 StreamMessagesHandler(_StreamingCallbackHandler)实现隐式逐 token 流式
|
|
1036
|
+
# (langchain-core >= 1.5.3,无需手动 patch _execute_model_async)。
|
|
1288
1037
|
raw_model = getattr(model, 'llm', model)
|
|
1289
1038
|
if raw_model is not model:
|
|
1290
1039
|
print(
|
|
@@ -1322,9 +1071,11 @@ async def create_deep_agent(
|
|
|
1322
1071
|
# 每次 create_agent(新会话首回合)跑一遍:版本没变时开销仅为 1+N 次元数据小读取。
|
|
1323
1072
|
if config.system_skills_dir and sandbox_backend:
|
|
1324
1073
|
await _sync_skills_to_sandbox(config.system_skills_dir, sandbox_backend,
|
|
1325
|
-
sandbox_dest="/skills/system", chmod_readonly=True
|
|
1074
|
+
sandbox_dest="/skills/system", chmod_readonly=True,
|
|
1075
|
+
allow_skills=config.system_skills_allow)
|
|
1326
1076
|
|
|
1327
1077
|
# 同步接口专属技能到沙箱(只读)。与 system 同一套 version 感知增量同步机制。
|
|
1078
|
+
# scoped 技能由服务端路由硬编码(scope),前端不可改,不在技能 ACL 范围,不传 allow_skills。
|
|
1328
1079
|
if config.scoped_skills_dir and config.scoped_skills_scope and sandbox_backend:
|
|
1329
1080
|
await _sync_skills_to_sandbox(config.scoped_skills_dir, sandbox_backend,
|
|
1330
1081
|
sandbox_dest=scoped_path, chmod_readonly=True)
|
|
@@ -1363,6 +1114,7 @@ async def create_deep_agent(
|
|
|
1363
1114
|
ToolResultTruncationMiddleware(),
|
|
1364
1115
|
TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
|
|
1365
1116
|
summarization_mw,
|
|
1117
|
+
ModelRequestPrepMiddleware(), # 紧跟 summarization:摘要重定位 + 动态压 max_tokens
|
|
1366
1118
|
SkillWriteGuardMiddleware(), # 系统 /skills/system 只读守卫(先于白名单)
|
|
1367
1119
|
SandboxPathGuardMiddleware(user_id), # 宿主绝对路径规范化/拦截(防越权读他人沙箱文件)
|
|
1368
1120
|
]
|
|
@@ -1441,10 +1193,6 @@ async def create_deep_agent(
|
|
|
1441
1193
|
except Exception:
|
|
1442
1194
|
pass
|
|
1443
1195
|
|
|
1444
|
-
# 🔑 Patch _execute_model_async: 将 ainvoke 替换为 astream + config
|
|
1445
|
-
# 修复 stream_mode="messages" 只返回 1 chunk 的问题
|
|
1446
|
-
_patch_agent_streaming(agent)
|
|
1447
|
-
|
|
1448
1196
|
recovery_manager = SandboxRecoveryManager(sandbox_backend)
|
|
1449
1197
|
|
|
1450
1198
|
return DeepAgent(
|
|
@@ -1556,6 +1304,7 @@ async def _sync_skills_to_sandbox(
|
|
|
1556
1304
|
*,
|
|
1557
1305
|
sandbox_dest: str = "/skills",
|
|
1558
1306
|
chmod_readonly: bool = False,
|
|
1307
|
+
allow_skills: Optional[set[str]] = None,
|
|
1559
1308
|
) -> None:
|
|
1560
1309
|
"""同步技能目录到沙箱(按版本检查,版本不一致则全量覆盖)
|
|
1561
1310
|
|
|
@@ -1564,6 +1313,11 @@ async def _sync_skills_to_sandbox(
|
|
|
1564
1313
|
- 沙箱有该技能且 version 一致 → 跳过
|
|
1565
1314
|
- 沙箱没有 / 版本不一致 → 从本地 skills/ 全量上传到沙箱
|
|
1566
1315
|
|
|
1316
|
+
技能 ACL(allow_skills): None=不过滤(向后兼容/管理员/平台 RPC)。
|
|
1317
|
+
非 None 时:(1) 枚举本地技能阶段跳过不在白名单的;(2) 删除沙箱里已存在
|
|
1318
|
+
但本次不在白名单的技能(撤销 enforcement——沙箱 per-user 跨会话持久,
|
|
1319
|
+
管理员在两次会话间撤销授权时必须主动删,否则 SkillsMiddleware 仍能 ls 到)。
|
|
1320
|
+
|
|
1567
1321
|
性能: 比对与上传均绕过 backend 的懒同步(_skip_lazy_sync=True),
|
|
1568
1322
|
避免「比对 read SKILL.md 前先整目录上传」「删除前先上传再删」的往返浪费。
|
|
1569
1323
|
多技能的 SKILL.md 比对用 gather 并发; batch_upload 服务端无条件覆盖,
|
|
@@ -1579,6 +1333,9 @@ async def _sync_skills_to_sandbox(
|
|
|
1579
1333
|
src = os.path.join(skills_dir, skill_name)
|
|
1580
1334
|
if not os.path.isdir(src):
|
|
1581
1335
|
continue
|
|
1336
|
+
# 技能 ACL:不在白名单的技能既不同步也不留痕(仅在 allow_skills 非 None 时)
|
|
1337
|
+
if allow_skills is not None and skill_name not in allow_skills:
|
|
1338
|
+
continue
|
|
1582
1339
|
local_version = ""
|
|
1583
1340
|
local_skill_md = os.path.join(src, "SKILL.md")
|
|
1584
1341
|
if os.path.isfile(local_skill_md):
|
|
@@ -1597,6 +1354,39 @@ async def _sync_skills_to_sandbox(
|
|
|
1597
1354
|
if child.is_dir:
|
|
1598
1355
|
existing_dirs.add(child.name)
|
|
1599
1356
|
|
|
1357
|
+
# 技能 ACL 撤销 enforcement:删除沙箱里已存在但本次不在白名单的技能。
|
|
1358
|
+
# 沙箱 per-user 跨会话持久,管理员在两次会话间撤销授权时,必须主动删除
|
|
1359
|
+
# 上一会话同步进来的技能,否则 SkillsMiddleware 仍能 ls 到 → agent 仍可调用,
|
|
1360
|
+
# 违反"代码层强制、不信 agent 自控"。allow_skills 为 None 时跳过(无 ACL)。
|
|
1361
|
+
if allow_skills is not None:
|
|
1362
|
+
for stale in sorted(existing_dirs - allow_skills):
|
|
1363
|
+
revoked = False
|
|
1364
|
+
for _attempt in range(2): # 最多重试一次,与版本不一致删除分支一致
|
|
1365
|
+
try:
|
|
1366
|
+
await backend.adelete(
|
|
1367
|
+
f"{sandbox_dest}/{stale}",
|
|
1368
|
+
recursive=True,
|
|
1369
|
+
_skip_lazy_sync=True)
|
|
1370
|
+
revoked = True
|
|
1371
|
+
break
|
|
1372
|
+
except Exception as e:
|
|
1373
|
+
SYLogger.warning(
|
|
1374
|
+
f"[DeepAgent] ACL 撤销删除失败(尝试{_attempt+1}): "
|
|
1375
|
+
f"{stale}, {e}")
|
|
1376
|
+
if revoked:
|
|
1377
|
+
SYLogger.info(
|
|
1378
|
+
f"[DeepAgent] ACL 撤销:删除沙箱未授权技能 {stale} "
|
|
1379
|
+
f"@{sandbox_dest}")
|
|
1380
|
+
else:
|
|
1381
|
+
SYLogger.error(
|
|
1382
|
+
f"[DeepAgent] ACL 撤销彻底失败,本次跳过: {stale}")
|
|
1383
|
+
# 清懒同步缓存:_sync_skills_to_sandbox 用 plain skill_name 作 key,
|
|
1384
|
+
# _lazy_sync_skill_from_path 用 "{scope}/{skill_name}",两种都清。
|
|
1385
|
+
# sandbox_dest 形如 /skills/system,scope 取其最后一段。
|
|
1386
|
+
scope = sandbox_dest.rsplit("/", 1)[-1]
|
|
1387
|
+
backend._synced_skills.discard(stale)
|
|
1388
|
+
backend._synced_skills.discard(f"{scope}/{stale}")
|
|
1389
|
+
|
|
1600
1390
|
# 并发读取所有已存在技能的沙箱 SKILL.md 比对版本(跳过懒同步)
|
|
1601
1391
|
async def _read_remote_version(skill_name: str) -> str:
|
|
1602
1392
|
if skill_name not in existing_dirs:
|
|
@@ -1624,6 +1414,19 @@ async def _sync_skills_to_sandbox(
|
|
|
1624
1414
|
name: rv for (name, _, _), rv in zip(local_skills, remote_versions)
|
|
1625
1415
|
}
|
|
1626
1416
|
|
|
1417
|
+
# 并发预校验正文新鲜度:仅对「版本一致」的技能做。版本不一致/无版本的
|
|
1418
|
+
# 直接当 stale,不进校验。历史上这一步是写在下方 for 循环里逐个 await 的,
|
|
1419
|
+
# 多技能场景退化为串行(N 次 aread = N × RTT)。校验互相独立,gather 即可。
|
|
1420
|
+
version_match_skills = [
|
|
1421
|
+
(name, src) for name, ver, src in local_skills
|
|
1422
|
+
if remote_version_map.get(name, "") and remote_version_map[name] == ver
|
|
1423
|
+
]
|
|
1424
|
+
fresh_results = await asyncio.gather(
|
|
1425
|
+
*[_verify_skill_content_fresh(backend, sandbox_dest, name, src)
|
|
1426
|
+
for name, src in version_match_skills]
|
|
1427
|
+
)
|
|
1428
|
+
fresh_map = dict(zip([n for n, _ in version_match_skills], fresh_results))
|
|
1429
|
+
|
|
1627
1430
|
skill_count = 0
|
|
1628
1431
|
skip_count = 0
|
|
1629
1432
|
for skill_name, local_version, src in local_skills:
|
|
@@ -1633,9 +1436,8 @@ async def _sync_skills_to_sandbox(
|
|
|
1633
1436
|
# 版本一致仍校验正文关键内容,防止"version 字段已更新但正文未同步"
|
|
1634
1437
|
# (历史上出现过沙箱 SKILL.md 版本号新、正文旧的脏数据,导致 agent
|
|
1635
1438
|
# 永远读不到新版指令)。校验失败则强制走删除+重传。
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
):
|
|
1439
|
+
# fresh_map 在进入循环前已并发预取,这里只查表不再 await。
|
|
1440
|
+
if not fresh_map.get(skill_name, False):
|
|
1639
1441
|
SYLogger.warning(
|
|
1640
1442
|
f"[DeepAgent] 技能版本一致但正文不一致,强制重传: {skill_name} "
|
|
1641
1443
|
f"v{local_version}")
|
|
@@ -1729,6 +1531,9 @@ async def _create_sandbox_backend(
|
|
|
1729
1531
|
sync_dirs=sync_dirs,
|
|
1730
1532
|
auto_sync=True,
|
|
1731
1533
|
skills_dir=skills_dir_for_backend,
|
|
1534
|
+
# 技能 ACL 白名单透传给沙箱后端:execute 命令引用被撤销技能的路径时,
|
|
1535
|
+
# _lazy_sync_skill_from_path 会用它拦截重新上传,关闭撤销残留缺口。
|
|
1536
|
+
skills_allow=config.system_skills_allow,
|
|
1732
1537
|
)
|
|
1733
1538
|
|
|
1734
1539
|
try:
|