sycommon-python-lib 0.2.1a3__tar.gz → 0.2.1a4__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.1a4}/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/pyproject.toml +1 -1
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/sandbox.py +84 -32
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/README.md +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/setup.cfg +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/cli.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/core/console.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/core/models.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/core/project.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/core/utils.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/templates/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/templates/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/templates/base/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/templates/web/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/01_basic_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/02_tool_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/03_structured_output.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/04_memory_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/05_streaming.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/06_multi_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/07_skills_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/08_middleware.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/09_interrupt.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/10_custom_llm.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/11_complex_workflow.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/12_batch_processing.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/middleware/01_basic_monitoring.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/middleware/02_permission_control.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/middleware/03_tool_skill_filter.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/middleware/04_caching_retry.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/middleware/05_sanitization.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/middleware/06_tracking.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/middleware/07_advanced.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/middleware/08_progressive_skills.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/middleware/override_examples.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/examples/virtual_employee_demo.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/exports.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/get_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/sandbox/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/sandbox/file_ops.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/sandbox/session.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/skills/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/skills/examples/faq_handler/scripts/search.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/skills/exports.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/virtual_employee.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/Config.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/DatabaseConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/ElasticsearchConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/EmbeddingConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/LLMConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/LangfuseConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/MQConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/RedisConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/RerankerConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/SentryConfig.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/database/async_base_db_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/database/async_database_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/database/base_db_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/database/database_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/database/elasticsearch_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/database/redis_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/database/token_usage_db_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/health/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/health/health_check.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/health/metrics.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/health/ping.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/heartbeat_process/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/embedding.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/get_llm.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/llm_logger.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/llm_tokens.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/output_fixing_runnable.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/struct_token.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/sy_langfuse.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/token_usage_es_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/llm/usage_token.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/async_sql_logger.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/kafka_log.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/logger_levels.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/logger_wrapper.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/process_logger.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/sql_logger.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/context.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/cors.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/docs.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/exception.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/middleware.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/monitor_memory.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/mq.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/timeout.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/traceid.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/base_http.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/log.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/mqlistener_config.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/mqmsg_model.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/mqsend_config.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/sso_user.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/token_usage.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/token_usage_mysql.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/notice/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/notice/uvicorn_monitor.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/sentry/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/sentry/sy_sentry.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/services.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/sse/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/sse/event.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/sse/sse.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/example.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/example2.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/feign.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/feign_client.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/nacos_client_base.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/nacos_config_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/nacos_service.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/nacos_service_registration.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/param.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tests/deep_agent_server.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tests/test_deep_agent.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tests/test_email.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tests/test_mq.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tools/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tools/async_utils.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tools/docs.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tools/env.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tools/merge_headers.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tools/snowflake.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tools/syemail.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tools/timing.py +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
- {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/sandbox.py
RENAMED
|
@@ -3,6 +3,25 @@
|
|
|
3
3
|
|
|
4
4
|
提供沙箱容器的中间件和 API 路由
|
|
5
5
|
支持 user_id 隔离,每个用户独立工作目录
|
|
6
|
+
|
|
7
|
+
目录结构:
|
|
8
|
+
{WORKSPACE_BASE}/ # 默认: /tmp/sycommon_sandbox
|
|
9
|
+
├── user_001/ # 用户 test_user_001 隔离目录
|
|
10
|
+
│ ├── skills/ # 同步的 /skills
|
|
11
|
+
│ │ └── multi-search-engine/
|
|
12
|
+
│ │ ├── config.json
|
|
13
|
+
│ │ └── ...
|
|
14
|
+
│ └── memory/ # 同步的 /memory
|
|
15
|
+
│ └── AGENTS.md
|
|
16
|
+
└── user_002/ # 其他用户完全隔离
|
|
17
|
+
├── skills/...
|
|
18
|
+
└── memory/...
|
|
19
|
+
|
|
20
|
+
路径隔离:
|
|
21
|
+
所有 API 端点使用统一路径解析 (resolve_sandbox_path):
|
|
22
|
+
- /skills/foo.md -> {workspace}/skills/foo.md
|
|
23
|
+
- skills/foo.md -> {workspace}/skills/foo.md
|
|
24
|
+
- 防止路径遍历攻击 (../../../etc/passwd)
|
|
6
25
|
"""
|
|
7
26
|
|
|
8
27
|
import os
|
|
@@ -35,6 +54,33 @@ def get_user_workspace(user_id: str) -> str:
|
|
|
35
54
|
return workspace
|
|
36
55
|
|
|
37
56
|
|
|
57
|
+
def resolve_sandbox_path(path: str, workspace: str) -> str:
|
|
58
|
+
"""
|
|
59
|
+
将沙箱路径解析到用户工作目录,实现路径隔离
|
|
60
|
+
|
|
61
|
+
所有路径(包括绝对路径)都会映射到用户工作目录下:
|
|
62
|
+
- /skills/foo.md -> {workspace}/skills/foo.md
|
|
63
|
+
- skills/foo.md -> {workspace}/skills/foo.md
|
|
64
|
+
|
|
65
|
+
同时防止路径遍历攻击,确保解析后的路径仍在工作目录内
|
|
66
|
+
"""
|
|
67
|
+
# 移除开头的 / 使其成为相对路径
|
|
68
|
+
if os.path.isabs(path):
|
|
69
|
+
path = path.lstrip('/')
|
|
70
|
+
|
|
71
|
+
# 规范化路径,防止 ../ 等路径遍历
|
|
72
|
+
path = os.path.normpath(path)
|
|
73
|
+
|
|
74
|
+
# 拼接到工作目录
|
|
75
|
+
resolved = os.path.normpath(os.path.join(workspace, path))
|
|
76
|
+
|
|
77
|
+
# 安全检查:确保最终路径在工作目录内
|
|
78
|
+
if not resolved.startswith(workspace):
|
|
79
|
+
raise ValueError(f"Path traversal detected: {path}")
|
|
80
|
+
|
|
81
|
+
return resolved
|
|
82
|
+
|
|
83
|
+
|
|
38
84
|
# ============== 请求/响应模型 ==============
|
|
39
85
|
|
|
40
86
|
class ExecuteRequest(BaseModel):
|
|
@@ -288,10 +334,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
288
334
|
async def ls_info(req: LsRequest):
|
|
289
335
|
"""列出目录内容"""
|
|
290
336
|
workspace = get_user_workspace(req.user_id)
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
337
|
+
try:
|
|
338
|
+
target_path = resolve_sandbox_path(req.path, workspace)
|
|
339
|
+
except ValueError as e:
|
|
340
|
+
SYLogger.error(f"[Sandbox Server] 列目录失败: {e}")
|
|
341
|
+
return []
|
|
295
342
|
|
|
296
343
|
if not os.path.isdir(target_path):
|
|
297
344
|
SYLogger.error(f"[Sandbox Server] 列目录失败: 目录不存在 {target_path}")
|
|
@@ -321,10 +368,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
321
368
|
async def read_file(req: ReadRequest):
|
|
322
369
|
"""读取文件内容"""
|
|
323
370
|
workspace = get_user_workspace(req.user_id)
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
371
|
+
try:
|
|
372
|
+
file_path = resolve_sandbox_path(req.file_path, workspace)
|
|
373
|
+
except ValueError as e:
|
|
374
|
+
SYLogger.error(f"[Sandbox Server] 读取失败: {e}")
|
|
375
|
+
return ReadResponse(error=str(e), content=None)
|
|
328
376
|
|
|
329
377
|
if not os.path.isfile(file_path):
|
|
330
378
|
SYLogger.error(f"[Sandbox Server] 读取失败: 文件不存在 {file_path}")
|
|
@@ -360,10 +408,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
360
408
|
async def write_file(req: WriteRequest):
|
|
361
409
|
"""写入新文件"""
|
|
362
410
|
workspace = get_user_workspace(req.user_id)
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
411
|
+
try:
|
|
412
|
+
file_path = resolve_sandbox_path(req.file_path, workspace)
|
|
413
|
+
except ValueError as e:
|
|
414
|
+
SYLogger.error(f"[Sandbox Server] 写入失败: {e}")
|
|
415
|
+
return WriteResponse(error=str(e), path=None)
|
|
367
416
|
|
|
368
417
|
SYLogger.info(f"[Sandbox Server] 写入文件: {file_path}")
|
|
369
418
|
|
|
@@ -392,10 +441,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
392
441
|
async def edit_file(req: EditRequest):
|
|
393
442
|
"""编辑文件"""
|
|
394
443
|
workspace = get_user_workspace(req.user_id)
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
444
|
+
try:
|
|
445
|
+
file_path = resolve_sandbox_path(req.file_path, workspace)
|
|
446
|
+
except ValueError as e:
|
|
447
|
+
SYLogger.error(f"[Sandbox Server] 编辑失败: {e}")
|
|
448
|
+
return EditResponse(error=str(e))
|
|
399
449
|
|
|
400
450
|
SYLogger.info(f"[Sandbox Server] 编辑文件: {file_path}")
|
|
401
451
|
|
|
@@ -440,10 +490,10 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
440
490
|
async def upload_file(req: UploadRequest):
|
|
441
491
|
"""上传文件"""
|
|
442
492
|
workspace = get_user_workspace(req.user_id)
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
493
|
+
try:
|
|
494
|
+
file_path = resolve_sandbox_path(req.path, workspace)
|
|
495
|
+
except ValueError as e:
|
|
496
|
+
return UploadResponse(path=req.path, error=str(e))
|
|
447
497
|
|
|
448
498
|
try:
|
|
449
499
|
content = base64.b64decode(req.content)
|
|
@@ -464,10 +514,10 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
464
514
|
async def download_file(req: DownloadRequest):
|
|
465
515
|
"""下载文件"""
|
|
466
516
|
workspace = get_user_workspace(req.user_id)
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
517
|
+
try:
|
|
518
|
+
file_path = resolve_sandbox_path(req.path, workspace)
|
|
519
|
+
except ValueError as e:
|
|
520
|
+
return DownloadResponse(path=req.path, error=str(e))
|
|
471
521
|
|
|
472
522
|
if not os.path.isfile(file_path):
|
|
473
523
|
return DownloadResponse(path=file_path, error="file_not_found")
|
|
@@ -490,10 +540,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
490
540
|
import glob as glob_module
|
|
491
541
|
|
|
492
542
|
workspace = get_user_workspace(req.user_id)
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
543
|
+
try:
|
|
544
|
+
search_path = resolve_sandbox_path(req.path, workspace)
|
|
545
|
+
except ValueError as e:
|
|
546
|
+
SYLogger.error(f"[Sandbox Server] glob 失败: {e}")
|
|
547
|
+
return []
|
|
497
548
|
|
|
498
549
|
full_pattern = os.path.join(search_path, req.pattern)
|
|
499
550
|
matches = sorted(glob_module.glob(full_pattern, recursive=True))
|
|
@@ -517,10 +568,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
517
568
|
import shlex
|
|
518
569
|
|
|
519
570
|
workspace = get_user_workspace(req.user_id)
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
571
|
+
try:
|
|
572
|
+
search_path = resolve_sandbox_path(req.path or "/", workspace)
|
|
573
|
+
except ValueError as e:
|
|
574
|
+
SYLogger.error(f"[Sandbox Server] grep 失败: {e}")
|
|
575
|
+
return []
|
|
524
576
|
|
|
525
577
|
quoted_path = shlex.quote(search_path)
|
|
526
578
|
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.1a4}/src/command/templates/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/templates/agent/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/command/templates/base/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/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.1a4}/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.1a4}/src/sycommon/agent/sandbox/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/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.1a4}/src/sycommon/agent/sandbox/session.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/skills/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/skills/exports.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/agent/virtual_employee.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/DatabaseConfig.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/EmbeddingConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/LLMConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/LangfuseConfig.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/RedisConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/config/RerankerConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/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.1a4}/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.1a4}/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.1a4}/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.1a4}/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.1a4}/src/sycommon/logging/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/async_sql_logger.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/kafka_log.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/logger_levels.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/logger_wrapper.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/process_logger.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/logging/sql_logger.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/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.1a4}/src/sycommon/middleware/exception.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/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.1a4}/src/sycommon/middleware/timeout.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/middleware/traceid.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/base_http.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/mqlistener_config.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/mqmsg_model.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/mqsend_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/models/token_usage.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/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.1a4}/src/sycommon/notice/uvicorn_monitor.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/rabbitmq/rabbitmq_client.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/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.1a4}/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.1a4}/src/sycommon/synacos/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/synacos/example2.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/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.1a4}/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.1a4}/src/sycommon/tests/deep_agent_server.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/src/sycommon/tests/test_deep_agent.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a4}/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.1a4}/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.1a4}/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
|