sycommon-python-lib 0.2.1a3__tar.gz → 0.2.1a5__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.1a3 → sycommon_python_lib-0.2.1a5}/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/pyproject.toml +1 -1
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/sandbox.py +97 -34
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/README.md +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/setup.cfg +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/cli.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/core/console.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/core/models.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/core/project.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/core/utils.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/base/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/web/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/01_basic_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/02_tool_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/03_structured_output.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/04_memory_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/05_streaming.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/06_multi_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/07_skills_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/08_middleware.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/09_interrupt.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/10_custom_llm.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/11_complex_workflow.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/12_batch_processing.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/01_basic_monitoring.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/02_permission_control.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/03_tool_skill_filter.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/04_caching_retry.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/05_sanitization.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/06_tracking.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/07_advanced.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/08_progressive_skills.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/override_examples.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/virtual_employee_demo.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/exports.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/get_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/file_ops.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/session.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/skills/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/skills/examples/faq_handler/scripts/search.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/skills/exports.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/virtual_employee.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/Config.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/DatabaseConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/ElasticsearchConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/EmbeddingConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/LLMConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/LangfuseConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/MQConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/RedisConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/RerankerConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/SentryConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/async_base_db_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/async_database_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/base_db_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/database_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/elasticsearch_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/redis_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/token_usage_db_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/health/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/health/health_check.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/health/metrics.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/health/ping.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/heartbeat_process/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/embedding.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/get_llm.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/llm_logger.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/llm_tokens.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/output_fixing_runnable.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/struct_token.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/sy_langfuse.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/token_usage_es_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/usage_token.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/async_sql_logger.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/kafka_log.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/logger_levels.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/logger_wrapper.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/process_logger.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/sql_logger.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/context.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/cors.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/docs.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/exception.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/middleware.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/monitor_memory.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/mq.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/timeout.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/traceid.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/base_http.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/log.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/mqlistener_config.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/mqmsg_model.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/mqsend_config.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/sso_user.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/token_usage.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/token_usage_mysql.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/notice/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/notice/uvicorn_monitor.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/sentry/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/sentry/sy_sentry.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/services.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/sse/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/sse/event.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/sse/sse.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/example.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/example2.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/feign.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/feign_client.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_client_base.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_config_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_service_registration.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/param.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tests/deep_agent_server.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tests/test_deep_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tests/test_email.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tests/test_mq.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/async_utils.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/docs.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/env.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/merge_headers.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/snowflake.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/syemail.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/timing.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/sandbox.py
RENAMED
|
@@ -3,6 +3,21 @@
|
|
|
3
3
|
|
|
4
4
|
提供沙箱容器的中间件和 API 路由
|
|
5
5
|
支持 user_id 隔离,每个用户独立工作目录
|
|
6
|
+
|
|
7
|
+
目录结构:
|
|
8
|
+
Linux (固定路径,重启后数据保留):
|
|
9
|
+
/data/sycommon_sandbox/{user_id}/
|
|
10
|
+
|
|
11
|
+
macOS/Windows (临时目录):
|
|
12
|
+
{tempdir}/sycommon_sandbox/{user_id}/
|
|
13
|
+
|
|
14
|
+
可通过环境变量 SANDBOX_WORKSPACE 覆盖默认路径
|
|
15
|
+
|
|
16
|
+
路径隔离:
|
|
17
|
+
所有 API 端点使用统一路径解析 (resolve_sandbox_path):
|
|
18
|
+
- /skills/foo.md -> {workspace}/skills/foo.md
|
|
19
|
+
- skills/foo.md -> {workspace}/skills/foo.md
|
|
20
|
+
- 防止路径遍历攻击 (../../../etc/passwd)
|
|
6
21
|
"""
|
|
7
22
|
|
|
8
23
|
import os
|
|
@@ -10,6 +25,7 @@ import subprocess
|
|
|
10
25
|
import base64
|
|
11
26
|
import shutil
|
|
12
27
|
import tempfile
|
|
28
|
+
import platform
|
|
13
29
|
from fastapi import FastAPI, APIRouter, Request, Header
|
|
14
30
|
from typing import Optional
|
|
15
31
|
|
|
@@ -20,8 +36,22 @@ from sycommon.logging.kafka_log import SYLogger
|
|
|
20
36
|
# ============== 常量配置 ==============
|
|
21
37
|
|
|
22
38
|
MAX_OUTPUT_BYTES = 100_000
|
|
23
|
-
#
|
|
24
|
-
|
|
39
|
+
# 默认工作目录配置
|
|
40
|
+
# - Linux: /data/sycommon_sandbox (固定路径,自动创建)
|
|
41
|
+
# - macOS/Windows: 使用系统临时目录
|
|
42
|
+
# 可通过环境变量 SANDBOX_WORKSPACE 覆盖
|
|
43
|
+
if platform.system() == "Linux":
|
|
44
|
+
_default_workspace = "/data/sycommon_sandbox"
|
|
45
|
+
# 自动创建目录(如果不存在)
|
|
46
|
+
try:
|
|
47
|
+
os.makedirs(_default_workspace, exist_ok=True)
|
|
48
|
+
except PermissionError:
|
|
49
|
+
# 降级到临时目录
|
|
50
|
+
import tempfile
|
|
51
|
+
_default_workspace = os.path.join(tempfile.gettempdir(), "sycommon_sandbox")
|
|
52
|
+
else:
|
|
53
|
+
# macOS / Windows 使用临时目录
|
|
54
|
+
_default_workspace = os.path.join(tempfile.gettempdir(), "sycommon_sandbox")
|
|
25
55
|
WORKSPACE_BASE = os.environ.get("SANDBOX_WORKSPACE", _default_workspace)
|
|
26
56
|
|
|
27
57
|
|
|
@@ -35,6 +65,33 @@ def get_user_workspace(user_id: str) -> str:
|
|
|
35
65
|
return workspace
|
|
36
66
|
|
|
37
67
|
|
|
68
|
+
def resolve_sandbox_path(path: str, workspace: str) -> str:
|
|
69
|
+
"""
|
|
70
|
+
将沙箱路径解析到用户工作目录,实现路径隔离
|
|
71
|
+
|
|
72
|
+
所有路径(包括绝对路径)都会映射到用户工作目录下:
|
|
73
|
+
- /skills/foo.md -> {workspace}/skills/foo.md
|
|
74
|
+
- skills/foo.md -> {workspace}/skills/foo.md
|
|
75
|
+
|
|
76
|
+
同时防止路径遍历攻击,确保解析后的路径仍在工作目录内
|
|
77
|
+
"""
|
|
78
|
+
# 移除开头的 / 使其成为相对路径
|
|
79
|
+
if os.path.isabs(path):
|
|
80
|
+
path = path.lstrip('/')
|
|
81
|
+
|
|
82
|
+
# 规范化路径,防止 ../ 等路径遍历
|
|
83
|
+
path = os.path.normpath(path)
|
|
84
|
+
|
|
85
|
+
# 拼接到工作目录
|
|
86
|
+
resolved = os.path.normpath(os.path.join(workspace, path))
|
|
87
|
+
|
|
88
|
+
# 安全检查:确保最终路径在工作目录内
|
|
89
|
+
if not resolved.startswith(workspace):
|
|
90
|
+
raise ValueError(f"Path traversal detected: {path}")
|
|
91
|
+
|
|
92
|
+
return resolved
|
|
93
|
+
|
|
94
|
+
|
|
38
95
|
# ============== 请求/响应模型 ==============
|
|
39
96
|
|
|
40
97
|
class ExecuteRequest(BaseModel):
|
|
@@ -288,10 +345,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
288
345
|
async def ls_info(req: LsRequest):
|
|
289
346
|
"""列出目录内容"""
|
|
290
347
|
workspace = get_user_workspace(req.user_id)
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
348
|
+
try:
|
|
349
|
+
target_path = resolve_sandbox_path(req.path, workspace)
|
|
350
|
+
except ValueError as e:
|
|
351
|
+
SYLogger.error(f"[Sandbox Server] 列目录失败: {e}")
|
|
352
|
+
return []
|
|
295
353
|
|
|
296
354
|
if not os.path.isdir(target_path):
|
|
297
355
|
SYLogger.error(f"[Sandbox Server] 列目录失败: 目录不存在 {target_path}")
|
|
@@ -321,10 +379,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
321
379
|
async def read_file(req: ReadRequest):
|
|
322
380
|
"""读取文件内容"""
|
|
323
381
|
workspace = get_user_workspace(req.user_id)
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
382
|
+
try:
|
|
383
|
+
file_path = resolve_sandbox_path(req.file_path, workspace)
|
|
384
|
+
except ValueError as e:
|
|
385
|
+
SYLogger.error(f"[Sandbox Server] 读取失败: {e}")
|
|
386
|
+
return ReadResponse(error=str(e), content=None)
|
|
328
387
|
|
|
329
388
|
if not os.path.isfile(file_path):
|
|
330
389
|
SYLogger.error(f"[Sandbox Server] 读取失败: 文件不存在 {file_path}")
|
|
@@ -360,10 +419,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
360
419
|
async def write_file(req: WriteRequest):
|
|
361
420
|
"""写入新文件"""
|
|
362
421
|
workspace = get_user_workspace(req.user_id)
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
422
|
+
try:
|
|
423
|
+
file_path = resolve_sandbox_path(req.file_path, workspace)
|
|
424
|
+
except ValueError as e:
|
|
425
|
+
SYLogger.error(f"[Sandbox Server] 写入失败: {e}")
|
|
426
|
+
return WriteResponse(error=str(e), path=None)
|
|
367
427
|
|
|
368
428
|
SYLogger.info(f"[Sandbox Server] 写入文件: {file_path}")
|
|
369
429
|
|
|
@@ -392,10 +452,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
392
452
|
async def edit_file(req: EditRequest):
|
|
393
453
|
"""编辑文件"""
|
|
394
454
|
workspace = get_user_workspace(req.user_id)
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
455
|
+
try:
|
|
456
|
+
file_path = resolve_sandbox_path(req.file_path, workspace)
|
|
457
|
+
except ValueError as e:
|
|
458
|
+
SYLogger.error(f"[Sandbox Server] 编辑失败: {e}")
|
|
459
|
+
return EditResponse(error=str(e))
|
|
399
460
|
|
|
400
461
|
SYLogger.info(f"[Sandbox Server] 编辑文件: {file_path}")
|
|
401
462
|
|
|
@@ -440,10 +501,10 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
440
501
|
async def upload_file(req: UploadRequest):
|
|
441
502
|
"""上传文件"""
|
|
442
503
|
workspace = get_user_workspace(req.user_id)
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
504
|
+
try:
|
|
505
|
+
file_path = resolve_sandbox_path(req.path, workspace)
|
|
506
|
+
except ValueError as e:
|
|
507
|
+
return UploadResponse(path=req.path, error=str(e))
|
|
447
508
|
|
|
448
509
|
try:
|
|
449
510
|
content = base64.b64decode(req.content)
|
|
@@ -464,10 +525,10 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
464
525
|
async def download_file(req: DownloadRequest):
|
|
465
526
|
"""下载文件"""
|
|
466
527
|
workspace = get_user_workspace(req.user_id)
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
528
|
+
try:
|
|
529
|
+
file_path = resolve_sandbox_path(req.path, workspace)
|
|
530
|
+
except ValueError as e:
|
|
531
|
+
return DownloadResponse(path=req.path, error=str(e))
|
|
471
532
|
|
|
472
533
|
if not os.path.isfile(file_path):
|
|
473
534
|
return DownloadResponse(path=file_path, error="file_not_found")
|
|
@@ -490,10 +551,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
490
551
|
import glob as glob_module
|
|
491
552
|
|
|
492
553
|
workspace = get_user_workspace(req.user_id)
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
554
|
+
try:
|
|
555
|
+
search_path = resolve_sandbox_path(req.path, workspace)
|
|
556
|
+
except ValueError as e:
|
|
557
|
+
SYLogger.error(f"[Sandbox Server] glob 失败: {e}")
|
|
558
|
+
return []
|
|
497
559
|
|
|
498
560
|
full_pattern = os.path.join(search_path, req.pattern)
|
|
499
561
|
matches = sorted(glob_module.glob(full_pattern, recursive=True))
|
|
@@ -517,10 +579,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
517
579
|
import shlex
|
|
518
580
|
|
|
519
581
|
workspace = get_user_workspace(req.user_id)
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
582
|
+
try:
|
|
583
|
+
search_path = resolve_sandbox_path(req.path or "/", workspace)
|
|
584
|
+
except ValueError as e:
|
|
585
|
+
SYLogger.error(f"[Sandbox Server] grep 失败: {e}")
|
|
586
|
+
return []
|
|
524
587
|
|
|
525
588
|
quoted_path = shlex.quote(search_path)
|
|
526
589
|
grep_opts = "-rHnF"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/agent/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/base/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/web/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/file_ops.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/session.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/skills/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/skills/exports.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/virtual_employee.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/DatabaseConfig.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/EmbeddingConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/LLMConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/LangfuseConfig.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/RedisConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/RerankerConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/SentryConfig.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/base_db_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/redis_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/health/health_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/struct_token.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/async_sql_logger.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/kafka_log.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/logger_levels.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/logger_wrapper.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/process_logger.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/sql_logger.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/exception.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/timeout.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/traceid.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/base_http.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/mqlistener_config.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/mqmsg_model.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/mqsend_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/token_usage.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/token_usage_mysql.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/notice/uvicorn_monitor.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_client.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_pool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/sentry/sy_sentry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/example2.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/feign_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tests/deep_agent_server.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tests/test_deep_agent.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tests/test_email.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/async_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/merge_headers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|