sycommon-python-lib 0.2.5a12__tar.gz → 0.2.5a14__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.5a12 → sycommon_python_lib-0.2.5a14}/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/pyproject.toml +1 -1
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/deep_agent.py +2 -11
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/multi_agent_team.py +2 -45
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/http_sandbox_backend.py +92 -166
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/sandbox.py +17 -516
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/sandbox.py +3 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/snowflake.py +32 -76
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -1
- sycommon_python_lib-0.2.5a12/src/sycommon/middleware/background_execution.py +0 -568
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/README.md +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/setup.cfg +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/cli.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/core/console.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/core/models.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/core/project.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/core/utils.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/api/query.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/db/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/db/service.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/model/parse.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/agent/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/.env.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/.gitignore.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/Dockerfile.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/app.yaml.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/model/file_info.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/base/requirements.txt.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/commands/hello.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/pyproject.toml.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/api/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/command/templates/web/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/nexus/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/__main__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/agents/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/agents/factory.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/agents/prompts.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/browser.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/console.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/dom.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/network.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/page_errors.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/performance.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/capabilities/screenshot.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/client.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/protocol.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cdp/repl.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/cli.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/cdp_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/chat_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/create_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/evaluate_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/init_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/memory_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/resume_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/rollback_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/commands/run_cmd.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/core/backend.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/core/config.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/core/display.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/core/git_integration.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/core/llm.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/core/state.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/evaluate/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/evaluate/api_evaluator.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/compressor.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/full.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/hot.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/manager.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/memory/warm.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/mode/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/mode/create.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/mode/optimize.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/models/config_models.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/baseline_tests.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/checkpoint.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/convergence.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/diagnosis.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/engine.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/environment.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/experience.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/harness_prompts.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/history.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/optimization_logger.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/pre_validation.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/reward.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/strategy_bandit.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/strategy_generator.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/rl/strategy_prompts.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycli/skills/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/agent_manager.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/chat_events.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/mcp/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/mcp/models.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/mcp/tool_loader.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/file_ops.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/sandbox/session.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/summarization_utils.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/ldap_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/oa_cache.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/oa_crypto.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/oa_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/auth/wecom_ldap_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/Config.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/DatabaseConfig.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/ElasticsearchConfig.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/EmbeddingConfig.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/LLMConfig.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/LangfuseConfig.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/MQConfig.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/PgConfig.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/RedisConfig.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/RerankerConfig.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/SentryConfig.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/XxlJobConfig.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/config/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/async_base_db_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/async_database_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/base_db_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/database_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/elasticsearch_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/pg_checkpoint_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/redis_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/database/token_usage_db_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/health/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/health/health_check.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/health/metrics.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/health/ping.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/heartbeat_process/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/embedding.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/get_llm.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/llm_logger.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/llm_tokens.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/output_fixing_runnable.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/struct_token.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/sy_langfuse.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/token_usage_es_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/llm/usage_token.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/async_sql_logger.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/kafka_log.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/logger_levels.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/logger_wrapper.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/process_logger.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/logging/sql_logger.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/mcp_server/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/mcp_server/server.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/context.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/cors.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/docs.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/exception.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/middleware.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/monitor_memory.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/mq.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/timeout.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/token_tracking.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/tool_result_truncation.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/middleware/traceid.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/base_http.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/log.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/mcp_server_config.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/mqlistener_config.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/mqmsg_model.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/mqsend_config.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/sso_user.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/token_usage.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/token_usage_mysql.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/models/xxljob_handler_config.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/notice/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/notice/uvicorn_monitor.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/notice/wecom_message.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/sentry/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/sentry/sy_sentry.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/services.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/sse/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/sse/event.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/sse/sse.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/example.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/example2.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/feign.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/feign_client.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_client_base.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_config_manager.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/nacos_service_registration.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/synacos/param.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/deep_agent_server.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_consumer_recovery.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_deep_agent.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_email.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_encoding_cache.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_mcp_server.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_mq.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_oa_login.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_real_summarization.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_summarization_config.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tests/test_summarization_real.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/async_utils.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/docs.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/env.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/merge_headers.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/syemail.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/tools/timing.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/xxljob/__init__.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/xxljob/xxljob_service.py +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
- {sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/tests/test_sycli.py +0 -0
{sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/deep_agent.py
RENAMED
|
@@ -49,7 +49,6 @@ from sycommon.llm.get_llm import get_llm
|
|
|
49
49
|
from sycommon.agent.sandbox.http_sandbox_backend import HTTPSandboxBackend
|
|
50
50
|
from sycommon.agent.sandbox.sandbox_recovery import SandboxRecoveryManager
|
|
51
51
|
from sycommon.agent.chat_events import ChatEvent, ChatEventBuilder, DEFAULT_AGENT_NAME
|
|
52
|
-
from sycommon.middleware.background_execution import BackgroundExecutionMiddleware
|
|
53
52
|
from sycommon.middleware.token_tracking import TokenTrackingMiddleware
|
|
54
53
|
from sycommon.middleware.tool_result_truncation import ToolResultTruncationMiddleware
|
|
55
54
|
from deepagents.middleware.summarization import create_summarization_tool_middleware # noqa: F401 保留 re-export
|
|
@@ -118,9 +117,6 @@ class AgentConfig(BaseModel):
|
|
|
118
117
|
# 调试模式
|
|
119
118
|
debug: bool = False
|
|
120
119
|
|
|
121
|
-
# 后台执行超时(秒)
|
|
122
|
-
background_timeout: int = 600
|
|
123
|
-
|
|
124
120
|
class Config:
|
|
125
121
|
arbitrary_types_allowed = True
|
|
126
122
|
|
|
@@ -143,12 +139,8 @@ class DeepAgent:
|
|
|
143
139
|
self.recovery_manager = recovery_manager
|
|
144
140
|
|
|
145
141
|
async def cleanup(self):
|
|
146
|
-
"""
|
|
147
|
-
|
|
148
|
-
try:
|
|
149
|
-
await self.sandbox_backend.akill_all_processes()
|
|
150
|
-
except Exception as e:
|
|
151
|
-
SYLogger.warning(f"[DeepAgent] 清理后台进程失败: {e}")
|
|
142
|
+
"""清理资源"""
|
|
143
|
+
pass
|
|
152
144
|
|
|
153
145
|
async def chat(
|
|
154
146
|
self,
|
|
@@ -653,7 +645,6 @@ async def create_deep_agent(
|
|
|
653
645
|
"system_prompt": config.system_prompt,
|
|
654
646
|
"debug": config.debug,
|
|
655
647
|
"middleware": [
|
|
656
|
-
BackgroundExecutionMiddleware(backend=sandbox_backend),
|
|
657
648
|
ToolResultTruncationMiddleware(),
|
|
658
649
|
TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
|
|
659
650
|
summarization_mw,
|
{sycommon_python_lib-0.2.5a12 → sycommon_python_lib-0.2.5a14}/src/sycommon/agent/multi_agent_team.py
RENAMED
|
@@ -42,7 +42,6 @@ from sycommon.agent.sandbox.http_sandbox_backend import HTTPSandboxBackend
|
|
|
42
42
|
from sycommon.tools.env import get_env_var
|
|
43
43
|
from sycommon.agent.sandbox.sandbox_recovery import SandboxRecoveryManager
|
|
44
44
|
from sycommon.agent.chat_events import ChatEvent, ChatEventBuilder, DEFAULT_AGENT_NAME
|
|
45
|
-
from sycommon.middleware.background_execution import BackgroundExecutionMiddleware
|
|
46
45
|
from sycommon.middleware.token_tracking import TokenTrackingMiddleware
|
|
47
46
|
from sycommon.middleware.tool_result_truncation import ToolResultTruncationMiddleware
|
|
48
47
|
from deepagents.middleware.summarization import create_summarization_tool_middleware # noqa: F401 保留 re-export
|
|
@@ -109,42 +108,6 @@ class TeamMember(BaseModel):
|
|
|
109
108
|
- 认真完成分配给你的任务
|
|
110
109
|
- 与团队成员保持良好协作
|
|
111
110
|
- 用中文回答问题
|
|
112
|
-
|
|
113
|
-
## 重要约束 - 沙箱执行环境
|
|
114
|
-
|
|
115
|
-
### 后台执行工具
|
|
116
|
-
|
|
117
|
-
沙箱提供了专门的后台执行工具,用于管理长时间运行的服务:
|
|
118
|
-
|
|
119
|
-
- **execute_background(command, timeout=600)**: 在后台启动命令(不阻塞),返回 process_id
|
|
120
|
-
- **check_process(process_id)**: 检查后台进程的状态
|
|
121
|
-
- **kill_process(process_id)**: 终止后台进程
|
|
122
|
-
|
|
123
|
-
### 启动和测试服务的正确方式
|
|
124
|
-
|
|
125
|
-
当需要启动长时间运行的服务(如 FastAPI、数据库)时:
|
|
126
|
-
|
|
127
|
-
```python
|
|
128
|
-
# 1. 后台启动服务
|
|
129
|
-
result = execute_background(command="uvicorn main:app --host 0.0.0.0 --port 8000")
|
|
130
|
-
process_id = result["process_id"]
|
|
131
|
-
|
|
132
|
-
# 2. 等待服务启动
|
|
133
|
-
execute(command="sleep 3")
|
|
134
|
-
|
|
135
|
-
# 3. 测试服务
|
|
136
|
-
execute(command="curl http://localhost:8000/health")
|
|
137
|
-
|
|
138
|
-
# 4. 完成后终止服务(重要!)
|
|
139
|
-
kill_process(process_id=process_id)
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### 关键规则
|
|
143
|
-
|
|
144
|
-
1. **启动服务必须使用 execute_background** - 使用 execute 启动服务会超时
|
|
145
|
-
2. **记住 process_id** - 每次启动服务都会返回新的 process_id,需要保存用于后续操作
|
|
146
|
-
3. **测试完成后必须 kill_process** - 避免资源浪费
|
|
147
|
-
4. **使用 check_process 检查状态** - 可以查看服务是否还在运行
|
|
148
111
|
"""
|
|
149
112
|
|
|
150
113
|
class Config:
|
|
@@ -228,12 +191,8 @@ class MultiAgentTeam:
|
|
|
228
191
|
self.recovery_manager = recovery_manager
|
|
229
192
|
|
|
230
193
|
async def cleanup(self):
|
|
231
|
-
"""
|
|
232
|
-
|
|
233
|
-
try:
|
|
234
|
-
await self.sandbox_backend.akill_all_processes()
|
|
235
|
-
except Exception as e:
|
|
236
|
-
SYLogger.warning(f"[MultiAgentTeam] 清理后台进程失败: {e}")
|
|
194
|
+
"""清理资源"""
|
|
195
|
+
pass
|
|
237
196
|
|
|
238
197
|
async def chat(
|
|
239
198
|
self,
|
|
@@ -590,7 +549,6 @@ async def create_multi_agent_team(
|
|
|
590
549
|
|
|
591
550
|
summarization_mw = build_summarization_middleware(model, config.model_name, sandbox_backend)
|
|
592
551
|
middleware = [
|
|
593
|
-
BackgroundExecutionMiddleware(backend=sandbox_backend),
|
|
594
552
|
ToolResultTruncationMiddleware(),
|
|
595
553
|
TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
|
|
596
554
|
summarization_mw,
|
|
@@ -647,7 +605,6 @@ async def create_multi_agent_team(
|
|
|
647
605
|
debug=config.debug,
|
|
648
606
|
name=coord_name,
|
|
649
607
|
middleware=[
|
|
650
|
-
BackgroundExecutionMiddleware(backend=sandbox_backend),
|
|
651
608
|
ToolResultTruncationMiddleware(),
|
|
652
609
|
TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
|
|
653
610
|
coord_summarization_mw,
|
|
@@ -90,6 +90,7 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
90
90
|
auto_sync: bool = False,
|
|
91
91
|
nacos_service_name: str = None,
|
|
92
92
|
nacos_group: str = "DEFAULT_GROUP",
|
|
93
|
+
token: str = None,
|
|
93
94
|
):
|
|
94
95
|
"""
|
|
95
96
|
初始化 HTTP 沙箱后端
|
|
@@ -112,13 +113,17 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
112
113
|
self._workspace_verified = False
|
|
113
114
|
self._local_mode: Optional[bool] = None
|
|
114
115
|
|
|
115
|
-
# Token authentication
|
|
116
|
-
self._token = os.environ.get("SANDBOX_TOKEN", "")
|
|
116
|
+
# Token authentication: instance-level > env var
|
|
117
|
+
self._token = token if token is not None else os.environ.get("SANDBOX_TOKEN", "")
|
|
117
118
|
|
|
118
119
|
# Nacos 配置(用于故障转移)
|
|
119
120
|
self._nacos_service_name = nacos_service_name
|
|
120
121
|
self._nacos_group = nacos_group
|
|
121
122
|
|
|
123
|
+
# 共享异步 HTTP 会话(连接池复用,惰性初始化)
|
|
124
|
+
self._async_session: Optional[aiohttp.ClientSession] = None
|
|
125
|
+
self._session_loop_id: Optional[int] = None # track which loop created the session
|
|
126
|
+
|
|
122
127
|
# 生成 ID
|
|
123
128
|
self._id = self._base_url.replace(
|
|
124
129
|
"http://", ""
|
|
@@ -130,6 +135,55 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
130
135
|
"/", "-"
|
|
131
136
|
)
|
|
132
137
|
|
|
138
|
+
async def _get_async_session(self) -> aiohttp.ClientSession:
|
|
139
|
+
"""获取或创建共享的 aiohttp ClientSession(连接池复用)
|
|
140
|
+
|
|
141
|
+
Handles the case where the backend was created in a different thread
|
|
142
|
+
(e.g. via asyncio.to_thread) by detecting loop mismatch and resetting.
|
|
143
|
+
"""
|
|
144
|
+
try:
|
|
145
|
+
current_loop = asyncio.get_running_loop()
|
|
146
|
+
except RuntimeError:
|
|
147
|
+
current_loop = None
|
|
148
|
+
|
|
149
|
+
# If session was created on a different event loop, discard it
|
|
150
|
+
if self._async_session is not None and self._session_loop_id != id(current_loop):
|
|
151
|
+
try:
|
|
152
|
+
self._async_session.close()
|
|
153
|
+
except Exception:
|
|
154
|
+
pass
|
|
155
|
+
self._async_session = None
|
|
156
|
+
|
|
157
|
+
if self._async_session is None or self._async_session.closed:
|
|
158
|
+
connector = aiohttp.TCPConnector(
|
|
159
|
+
ssl=_SSL_CONTEXT,
|
|
160
|
+
limit=10,
|
|
161
|
+
limit_per_host=10,
|
|
162
|
+
keepalive_timeout=30,
|
|
163
|
+
enable_cleanup_closed=True,
|
|
164
|
+
)
|
|
165
|
+
self._async_session = aiohttp.ClientSession(connector=connector)
|
|
166
|
+
self._session_loop_id = id(current_loop)
|
|
167
|
+
return self._async_session
|
|
168
|
+
|
|
169
|
+
async def acleanup(self):
|
|
170
|
+
"""关闭共享的异步 HTTP 会话,释放连接池资源"""
|
|
171
|
+
if self._async_session and not self._async_session.closed:
|
|
172
|
+
await self._async_session.close()
|
|
173
|
+
self._async_session = None
|
|
174
|
+
|
|
175
|
+
def cleanup(self):
|
|
176
|
+
"""同步方式关闭共享会话(供非 async 上下文使用)"""
|
|
177
|
+
if self._async_session and not self._async_session.closed:
|
|
178
|
+
try:
|
|
179
|
+
loop = asyncio.get_running_loop()
|
|
180
|
+
loop.create_task(self._async_session.close())
|
|
181
|
+
except RuntimeError:
|
|
182
|
+
loop = asyncio.new_event_loop()
|
|
183
|
+
loop.run_until_complete(self._async_session.close())
|
|
184
|
+
loop.close()
|
|
185
|
+
self._async_session = None
|
|
186
|
+
|
|
133
187
|
@classmethod
|
|
134
188
|
def from_nacos(
|
|
135
189
|
cls,
|
|
@@ -360,10 +414,11 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
360
414
|
SYLogger.warning(f"[Sandbox] 请求失败 (尝试 {attempt + 1}/{max_retries}): {self._base_url} - {e}")
|
|
361
415
|
|
|
362
416
|
if attempt < max_retries - 1:
|
|
417
|
+
backoff = 2 ** attempt
|
|
363
418
|
switched = self._refresh_from_nacos_and_switch_sync()
|
|
364
419
|
if not switched:
|
|
365
420
|
import time
|
|
366
|
-
time.sleep(
|
|
421
|
+
time.sleep(backoff)
|
|
367
422
|
else:
|
|
368
423
|
raise RuntimeError(f"沙箱服务不可用: {e}")
|
|
369
424
|
|
|
@@ -376,38 +431,32 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
376
431
|
# ============== 内部方法 - 异步版本 ==============
|
|
377
432
|
|
|
378
433
|
async def _post_async(self, endpoint: str, data: dict, timeout: int = None) -> dict:
|
|
379
|
-
"""异步 POST
|
|
434
|
+
"""异步 POST 请求(使用共享连接池)"""
|
|
380
435
|
actual_timeout = timeout if timeout is not None else self._timeout
|
|
381
436
|
if "/execute" in endpoint:
|
|
382
437
|
http_timeout = actual_timeout + 60
|
|
383
438
|
else:
|
|
384
439
|
http_timeout = actual_timeout + 30
|
|
385
440
|
|
|
386
|
-
|
|
387
|
-
headers = {"Content-Type": "application/json"}
|
|
388
|
-
if trace_id:
|
|
389
|
-
headers["x-traceid-header"] = str(trace_id)
|
|
390
|
-
if self._token:
|
|
391
|
-
headers["X-Sandbox-Token"] = self._token
|
|
441
|
+
headers = self._build_headers()
|
|
392
442
|
|
|
393
443
|
url = f"{self._base_url}{endpoint}"
|
|
394
444
|
SYLogger.info(f"[Sandbox] Async POST 请求开始: {url}, timeout={http_timeout}s")
|
|
395
445
|
|
|
396
446
|
timeout_obj = aiohttp.ClientTimeout(total=http_timeout)
|
|
397
|
-
|
|
398
|
-
async with
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
return result
|
|
447
|
+
session = await self._get_async_session()
|
|
448
|
+
async with session.post(url, json=data, headers=headers, timeout=timeout_obj) as resp:
|
|
449
|
+
SYLogger.info(f"[Sandbox] Async POST 响应状态码: {resp.status}")
|
|
450
|
+
if resp.status >= 400:
|
|
451
|
+
text = await resp.text()
|
|
452
|
+
SYLogger.error(f"[Sandbox] HTTP 错误 {resp.status}: {text}")
|
|
453
|
+
resp.raise_for_status()
|
|
454
|
+
result = await resp.json()
|
|
455
|
+
SYLogger.info(f"[Sandbox] Async POST 成功: {url}")
|
|
456
|
+
return result
|
|
408
457
|
|
|
409
458
|
async def _post_async_with_failover(self, endpoint: str, data: dict, timeout: int = None) -> dict:
|
|
410
|
-
"""
|
|
459
|
+
"""带故障转移和指数退避的异步 POST 请求"""
|
|
411
460
|
max_retries = 3
|
|
412
461
|
|
|
413
462
|
for attempt in range(max_retries):
|
|
@@ -417,10 +466,12 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
417
466
|
SYLogger.warning(f"[Sandbox] Async 请求失败 (尝试 {attempt + 1}/{max_retries}): {self._base_url} - {e}")
|
|
418
467
|
|
|
419
468
|
if attempt < max_retries - 1:
|
|
469
|
+
# 指数退避: 1s, 2s
|
|
470
|
+
backoff = 2 ** attempt
|
|
420
471
|
# 尝试故障转移
|
|
421
472
|
switched = await asyncio.to_thread(self._refresh_from_nacos_and_switch_sync)
|
|
422
473
|
if not switched:
|
|
423
|
-
await asyncio.sleep(
|
|
474
|
+
await asyncio.sleep(backoff)
|
|
424
475
|
else:
|
|
425
476
|
raise RuntimeError(f"沙箱服务不可用: {e}")
|
|
426
477
|
|
|
@@ -489,20 +540,19 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
489
540
|
SYLogger.info(f"[Sandbox] 使用环境变量 SANDBOX_WORKSPACE={env_workspace}")
|
|
490
541
|
return self._workspace_root
|
|
491
542
|
|
|
492
|
-
# 从沙箱服务端 health
|
|
543
|
+
# 从沙箱服务端 health 接口获取(使用共享连接池)
|
|
493
544
|
try:
|
|
494
545
|
url = f"{self._base_url}{SANDBOX_API_PREFIX}/health"
|
|
495
|
-
connector = aiohttp.TCPConnector(ssl=_SSL_CONTEXT)
|
|
496
546
|
timeout_obj = aiohttp.ClientTimeout(total=10)
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
547
|
+
session = await self._get_async_session()
|
|
548
|
+
async with session.get(url, timeout=timeout_obj) as resp:
|
|
549
|
+
if resp.status == 200:
|
|
550
|
+
data = await resp.json()
|
|
551
|
+
workspace = data.get("workspace", "")
|
|
552
|
+
if workspace:
|
|
553
|
+
self._workspace_root = workspace
|
|
554
|
+
SYLogger.info(f"[Sandbox] 从沙箱服务端获取 WORKSPACE_ROOT={workspace}")
|
|
555
|
+
return self._workspace_root
|
|
506
556
|
except Exception as e:
|
|
507
557
|
SYLogger.warning(f"[Sandbox] 异步获取沙箱 workspace 失败: {e}")
|
|
508
558
|
|
|
@@ -725,129 +775,6 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
725
775
|
SYLogger.info(f"[Sandbox] _upload_directory_async 完成: 成功={success_count}, 失败={failed_count}")
|
|
726
776
|
return {"success": success_count, "failed": failed_count, "errors": errors}
|
|
727
777
|
|
|
728
|
-
# ============== 后台进程执行 ==============
|
|
729
|
-
|
|
730
|
-
def execute_background(self, command: str, *, timeout: int = 600) -> dict:
|
|
731
|
-
"""后台执行 shell 命令(不阻塞,立即返回 process_id)"""
|
|
732
|
-
self._ensure_synced_sync()
|
|
733
|
-
SYLogger.info(f"[Sandbox] 后台执行: {command}")
|
|
734
|
-
try:
|
|
735
|
-
result = self._post_sync(f"{SANDBOX_API_PREFIX}/execute_background", {
|
|
736
|
-
"command": command.strip(),
|
|
737
|
-
"user_id": self._user_id,
|
|
738
|
-
"timeout": timeout
|
|
739
|
-
})
|
|
740
|
-
SYLogger.info(f"[Sandbox] 后台进程已启动: process_id={result['process_id']}")
|
|
741
|
-
return result
|
|
742
|
-
except Exception as e:
|
|
743
|
-
SYLogger.error(f"[Sandbox] 后台执行失败: {e}")
|
|
744
|
-
return {"process_id": None, "status": "error", "error": str(e)}
|
|
745
|
-
|
|
746
|
-
async def aexecute_stream(self, command: str, *, timeout: int = None):
|
|
747
|
-
"""异步流式执行 shell 命令,yield SSE 事件字典
|
|
748
|
-
|
|
749
|
-
每个 yield 的格式: {"type": "output"|"done"|"error", "data": ..., "exit_code": ...}
|
|
750
|
-
"""
|
|
751
|
-
await self._ensure_synced_async()
|
|
752
|
-
actual_timeout = timeout if timeout is not None else self._timeout
|
|
753
|
-
url = f"{self._base_url}{SANDBOX_API_PREFIX}/execute_stream"
|
|
754
|
-
timeout_obj = aiohttp.ClientTimeout(total=actual_timeout + 60)
|
|
755
|
-
connector = aiohttp.TCPConnector(ssl=_SSL_CONTEXT)
|
|
756
|
-
async with aiohttp.ClientSession(connector=connector) as session:
|
|
757
|
-
async with session.post(url, json={
|
|
758
|
-
"command": command.strip(),
|
|
759
|
-
"user_id": self._user_id,
|
|
760
|
-
"timeout": actual_timeout
|
|
761
|
-
}, timeout=timeout_obj) as resp:
|
|
762
|
-
resp.raise_for_status()
|
|
763
|
-
buffer = ""
|
|
764
|
-
async for chunk in resp.content.iter_any():
|
|
765
|
-
buffer += chunk.decode('utf-8', errors='replace')
|
|
766
|
-
while "\n\n" in buffer:
|
|
767
|
-
event_str, buffer = buffer.split("\n\n", 1)
|
|
768
|
-
for line in event_str.strip().split("\n"):
|
|
769
|
-
if line.startswith("data: "):
|
|
770
|
-
import json
|
|
771
|
-
yield json.loads(line[6:])
|
|
772
|
-
|
|
773
|
-
async def aexecute_background(self, command: str, *, timeout: int = None) -> dict:
|
|
774
|
-
"""异步后台执行 shell 命令(服务端负责路径隔离)"""
|
|
775
|
-
await self._ensure_synced_async()
|
|
776
|
-
actual_timeout = timeout if timeout is not None else 600
|
|
777
|
-
SYLogger.info(f"[Sandbox] 异步后台执行: {command}")
|
|
778
|
-
try:
|
|
779
|
-
result = await self._post_async_with_failover(f"{SANDBOX_API_PREFIX}/execute_background", {
|
|
780
|
-
"command": command.strip(),
|
|
781
|
-
"user_id": self._user_id,
|
|
782
|
-
"timeout": actual_timeout
|
|
783
|
-
}, timeout=actual_timeout)
|
|
784
|
-
SYLogger.info(f"[Sandbox] 异步后台进程已启动: process_id={result['process_id']}")
|
|
785
|
-
return result
|
|
786
|
-
except Exception as e:
|
|
787
|
-
SYLogger.error(f"[Sandbox] 异步后台执行失败: {e}")
|
|
788
|
-
return {"process_id": None, "status": "error", "error": str(e)}
|
|
789
|
-
|
|
790
|
-
async def acheck_process(self, process_id: str, *, timeout: int = None) -> dict:
|
|
791
|
-
"""异步检查后台进程状态"""
|
|
792
|
-
try:
|
|
793
|
-
result = await self._post_async_with_failover(f"{SANDBOX_API_PREFIX}/process_status", {
|
|
794
|
-
"process_id": process_id,
|
|
795
|
-
"user_id": self._user_id
|
|
796
|
-
}, timeout=timeout)
|
|
797
|
-
return result
|
|
798
|
-
except Exception as e:
|
|
799
|
-
SYLogger.error(f"[Sandbox] 异步检查进程失败: {e}")
|
|
800
|
-
return {"process_id": process_id, "status": "error", "error": str(e)}
|
|
801
|
-
|
|
802
|
-
async def akill_process(self, process_id: str, *, timeout: int = None) -> dict:
|
|
803
|
-
"""异步终止后台进程"""
|
|
804
|
-
try:
|
|
805
|
-
result = await self._post_async_with_failover(f"{SANDBOX_API_PREFIX}/kill_process", {
|
|
806
|
-
"process_id": process_id,
|
|
807
|
-
"user_id": self._user_id
|
|
808
|
-
}, timeout=timeout)
|
|
809
|
-
SYLogger.info(f"[Sandbox] 异步进程终止: {process_id}, status={result['status']}")
|
|
810
|
-
return result
|
|
811
|
-
except Exception as e:
|
|
812
|
-
SYLogger.error(f"[Sandbox] 异步终止进程失败: {e}")
|
|
813
|
-
return {"process_id": process_id, "status": "error", "error": str(e)}
|
|
814
|
-
|
|
815
|
-
async def akill_all_processes(self, *, timeout: int = None) -> dict:
|
|
816
|
-
"""异步终止该用户的所有后台进程"""
|
|
817
|
-
try:
|
|
818
|
-
result = await self._post_async_with_failover(
|
|
819
|
-
f"{SANDBOX_API_PREFIX}/kill_all_processes",
|
|
820
|
-
{"user_id": self._user_id},
|
|
821
|
-
timeout=timeout,
|
|
822
|
-
)
|
|
823
|
-
SYLogger.info(
|
|
824
|
-
f"[Sandbox] 批量终止进程: "
|
|
825
|
-
f"killed={result.get('killed_count', 0)}, "
|
|
826
|
-
f"already_completed={result.get('already_completed', 0)}"
|
|
827
|
-
)
|
|
828
|
-
return result
|
|
829
|
-
except Exception as e:
|
|
830
|
-
SYLogger.error(f"[Sandbox] 批量终止进程失败: {e}")
|
|
831
|
-
return {"killed_count": 0, "error": str(e)}
|
|
832
|
-
|
|
833
|
-
# ============== 端口转发 ==============
|
|
834
|
-
|
|
835
|
-
async def aport_forward(self, port: int, action: str = "list", *, timeout: int = None) -> dict:
|
|
836
|
-
"""异步端口转发管理"""
|
|
837
|
-
return await self._post_async_with_failover(f"{SANDBOX_API_PREFIX}/port_forward", {
|
|
838
|
-
"port": port,
|
|
839
|
-
"user_id": self._user_id,
|
|
840
|
-
"action": action,
|
|
841
|
-
}, timeout=timeout)
|
|
842
|
-
|
|
843
|
-
async def awatch(self, path: str = "/", event_types: list = None, *, timeout: int = None) -> dict:
|
|
844
|
-
"""异步查询文件变更"""
|
|
845
|
-
return await self._post_async_with_failover(f"{SANDBOX_API_PREFIX}/watch", {
|
|
846
|
-
"path": path,
|
|
847
|
-
"user_id": self._user_id,
|
|
848
|
-
"event_types": event_types,
|
|
849
|
-
}, timeout=timeout)
|
|
850
|
-
|
|
851
778
|
# ============== 批量操作 ==============
|
|
852
779
|
|
|
853
780
|
def upload_files(self, files: List[tuple[str, bytes]]) -> List[FileUploadResponse]:
|
|
@@ -1193,7 +1120,7 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
1193
1120
|
failed_count += 1
|
|
1194
1121
|
errors.append({"path": sandbox_path, "error": str(e)})
|
|
1195
1122
|
|
|
1196
|
-
max_workers = min(
|
|
1123
|
+
max_workers = min(4, len(files_to_upload)) if files_to_upload else 1
|
|
1197
1124
|
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
|
1198
1125
|
futures = [
|
|
1199
1126
|
executor.submit(_upload_one, idx, sandbox_path, local_file)
|
|
@@ -1307,18 +1234,17 @@ class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
|
1307
1234
|
raise
|
|
1308
1235
|
|
|
1309
1236
|
async def ahealth_check(self, timeout: int = 10) -> dict:
|
|
1310
|
-
"""
|
|
1237
|
+
"""异步健康检查(使用共享连接池)"""
|
|
1311
1238
|
try:
|
|
1312
1239
|
headers = self._build_headers()
|
|
1313
1240
|
url = f"{self._base_url}{SANDBOX_API_PREFIX}/health"
|
|
1314
1241
|
timeout_obj = aiohttp.ClientTimeout(total=timeout)
|
|
1315
|
-
|
|
1316
|
-
async with
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
return result
|
|
1242
|
+
session = await self._get_async_session()
|
|
1243
|
+
async with session.get(url, headers=headers, timeout=timeout_obj) as resp:
|
|
1244
|
+
resp.raise_for_status()
|
|
1245
|
+
result = await resp.json()
|
|
1246
|
+
SYLogger.info(f"[Sandbox] 异步健康检查成功: {result}")
|
|
1247
|
+
return result
|
|
1322
1248
|
except Exception as e:
|
|
1323
1249
|
SYLogger.error(f"[Sandbox] 异步健康检查失败: {e}")
|
|
1324
1250
|
raise
|