sycommon-python-lib 0.2.1a0__tar.gz → 0.2.1a2__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.1a0 → sycommon_python_lib-0.2.1a2}/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/pyproject.toml +1 -1
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/sandbox/http_sandbox_backend.py +11 -3
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/sandbox.py +31 -3
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/README.md +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/setup.cfg +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/cli.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/core/console.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/core/models.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/core/project.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/core/utils.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/templates/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/templates/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/templates/base/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/templates/web/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/01_basic_agent.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/02_tool_agent.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/03_structured_output.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/04_memory_agent.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/05_streaming.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/06_multi_agent.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/07_skills_agent.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/08_middleware.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/09_interrupt.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/10_custom_llm.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/11_complex_workflow.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/12_batch_processing.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/middleware/01_basic_monitoring.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/middleware/02_permission_control.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/middleware/03_tool_skill_filter.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/middleware/04_caching_retry.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/middleware/05_sanitization.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/middleware/06_tracking.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/middleware/07_advanced.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/middleware/08_progressive_skills.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/middleware/override_examples.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/examples/virtual_employee_demo.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/exports.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/get_agent.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/sandbox/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/sandbox/file_ops.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/sandbox/session.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/skills/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/skills/examples/faq_handler/scripts/search.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/skills/exports.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/virtual_employee.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/Config.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/DatabaseConfig.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/ElasticsearchConfig.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/EmbeddingConfig.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/LLMConfig.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/LangfuseConfig.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/MQConfig.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/RedisConfig.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/RerankerConfig.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/SentryConfig.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/database/async_base_db_service.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/database/async_database_service.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/database/base_db_service.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/database/database_service.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/database/elasticsearch_service.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/database/redis_service.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/database/token_usage_db_service.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/health/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/health/health_check.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/health/metrics.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/health/ping.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/heartbeat_process/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/embedding.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/get_llm.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/llm_logger.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/llm_tokens.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/output_fixing_runnable.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/struct_token.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/sy_langfuse.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/token_usage_es_service.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/llm/usage_token.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/async_sql_logger.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/kafka_log.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/logger_levels.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/logger_wrapper.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/process_logger.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/sql_logger.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/context.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/cors.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/docs.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/exception.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/middleware.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/monitor_memory.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/mq.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/timeout.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/traceid.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/base_http.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/log.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/mqlistener_config.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/mqmsg_model.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/mqsend_config.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/sso_user.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/token_usage.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/token_usage_mysql.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/notice/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/notice/uvicorn_monitor.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/sentry/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/sentry/sy_sentry.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/services.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/sse/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/sse/event.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/sse/sse.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/example.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/example2.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/feign.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/feign_client.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/nacos_client_base.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/nacos_config_manager.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/nacos_service.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/nacos_service_registration.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/param.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tests/deep_agent_server.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tests/test_deep_agent.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tests/test_email.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tests/test_mq.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tools/__init__.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tools/async_utils.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tools/docs.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tools/env.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tools/merge_headers.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tools/snowflake.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tools/syemail.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tools/timing.py +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
- {sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
|
@@ -13,14 +13,14 @@ from sycommon.agent.sandbox.session import get_async_session
|
|
|
13
13
|
from sycommon.agent.sandbox.file_ops import FileOperationsMixin, SANDBOX_API_PREFIX
|
|
14
14
|
|
|
15
15
|
from deepagents.backends.protocol import (
|
|
16
|
-
|
|
16
|
+
SandboxBackendProtocol,
|
|
17
17
|
ExecuteResponse,
|
|
18
18
|
FileDownloadResponse,
|
|
19
19
|
FileUploadResponse,
|
|
20
20
|
)
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
class HTTPSandboxBackend(FileOperationsMixin,
|
|
23
|
+
class HTTPSandboxBackend(FileOperationsMixin, SandboxBackendProtocol):
|
|
24
24
|
"""
|
|
25
25
|
通过 HTTP API 连接远程沙箱容器(仅异步)
|
|
26
26
|
|
|
@@ -92,11 +92,19 @@ class HTTPSandboxBackend(FileOperationsMixin, BackendProtocol):
|
|
|
92
92
|
HTTPSandboxBackend 实例
|
|
93
93
|
|
|
94
94
|
Raises:
|
|
95
|
-
RuntimeError:
|
|
95
|
+
RuntimeError: 无法发现服务实例或 NacosService 未初始化
|
|
96
96
|
"""
|
|
97
97
|
from sycommon.synacos.nacos_service import NacosService
|
|
98
98
|
|
|
99
|
+
# 获取单例实例(参考 feign_client 的方式)
|
|
99
100
|
nacos_manager = NacosService(None)
|
|
101
|
+
|
|
102
|
+
# 检查单例是否已正确初始化
|
|
103
|
+
if not hasattr(nacos_manager, 'discovery'):
|
|
104
|
+
raise RuntimeError(
|
|
105
|
+
"NacosService 未初始化,请确保服务启动时已调用 NacosService.setup_nacos(config)"
|
|
106
|
+
)
|
|
107
|
+
|
|
100
108
|
instances = nacos_manager.get_service_instances(
|
|
101
109
|
service_name, group=group, target_version=version
|
|
102
110
|
)
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/sandbox.py
RENAMED
|
@@ -14,6 +14,7 @@ from fastapi import FastAPI, APIRouter, Request, Header
|
|
|
14
14
|
from typing import Optional
|
|
15
15
|
|
|
16
16
|
from pydantic import BaseModel
|
|
17
|
+
from sycommon.logging.kafka_log import SYLogger
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
# ============== 常量配置 ==============
|
|
@@ -230,6 +231,8 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
230
231
|
exit_code=1
|
|
231
232
|
)
|
|
232
233
|
|
|
234
|
+
SYLogger.info(f"[Sandbox Server] 执行命令: {req.command} (user={req.user_id}, timeout={req.timeout}s)")
|
|
235
|
+
|
|
233
236
|
try:
|
|
234
237
|
result = subprocess.run(
|
|
235
238
|
req.command,
|
|
@@ -258,6 +261,8 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
258
261
|
if result.returncode != 0:
|
|
259
262
|
output = f"{output.rstrip()}\n\nExit code: {result.returncode}"
|
|
260
263
|
|
|
264
|
+
SYLogger.info(f"[Sandbox Server] 执行完成: exit_code={result.returncode}, output_len={len(output)}")
|
|
265
|
+
|
|
261
266
|
return ExecuteResponse(
|
|
262
267
|
output=output,
|
|
263
268
|
exit_code=result.returncode,
|
|
@@ -265,12 +270,14 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
265
270
|
)
|
|
266
271
|
|
|
267
272
|
except subprocess.TimeoutExpired:
|
|
273
|
+
SYLogger.error(f"[Sandbox Server] 执行超时: {req.timeout}s")
|
|
268
274
|
return ExecuteResponse(
|
|
269
275
|
output=f"Error: Command timed out after {req.timeout} seconds.",
|
|
270
276
|
exit_code=124,
|
|
271
277
|
truncated=False
|
|
272
278
|
)
|
|
273
279
|
except Exception as e:
|
|
280
|
+
SYLogger.error(f"[Sandbox Server] 执行异常: {e}")
|
|
274
281
|
return ExecuteResponse(
|
|
275
282
|
output=f"Error: {type(e).__name__}: {e}",
|
|
276
283
|
exit_code=1,
|
|
@@ -287,8 +294,10 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
287
294
|
target_path = os.path.join(workspace, target_path)
|
|
288
295
|
|
|
289
296
|
if not os.path.isdir(target_path):
|
|
297
|
+
SYLogger.error(f"[Sandbox Server] 列目录失败: 目录不存在 {target_path}")
|
|
290
298
|
return []
|
|
291
299
|
|
|
300
|
+
SYLogger.info(f"[Sandbox Server] 列出目录: {target_path}")
|
|
292
301
|
results = []
|
|
293
302
|
try:
|
|
294
303
|
with os.scandir(target_path) as it:
|
|
@@ -302,9 +311,10 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
302
311
|
except Exception:
|
|
303
312
|
pass
|
|
304
313
|
results.append(info)
|
|
305
|
-
except Exception:
|
|
306
|
-
|
|
314
|
+
except Exception as e:
|
|
315
|
+
SYLogger.error(f"[Sandbox Server] 列目录异常: {e}")
|
|
307
316
|
|
|
317
|
+
SYLogger.info(f"[Sandbox Server] 目录内容: {len(results)} 项")
|
|
308
318
|
return results
|
|
309
319
|
|
|
310
320
|
@sandbox_router.post("/read", response_model=ReadResponse)
|
|
@@ -317,8 +327,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
317
327
|
file_path = os.path.join(workspace, file_path)
|
|
318
328
|
|
|
319
329
|
if not os.path.isfile(file_path):
|
|
330
|
+
SYLogger.error(f"[Sandbox Server] 读取失败: 文件不存在 {file_path}")
|
|
320
331
|
return ReadResponse(error=f"File '{file_path}' not found", content=None)
|
|
321
332
|
|
|
333
|
+
SYLogger.info(f"[Sandbox Server] 读取文件: {file_path} (offset={req.offset}, limit={req.limit})")
|
|
334
|
+
|
|
322
335
|
try:
|
|
323
336
|
with open(file_path, 'r') as f:
|
|
324
337
|
lines = f.readlines()
|
|
@@ -335,9 +348,12 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
335
348
|
line_num = req.offset + i + 1
|
|
336
349
|
output.append(f"{line_num:6d}\t{line.rstrip()}")
|
|
337
350
|
|
|
338
|
-
|
|
351
|
+
content = "\n".join(output)
|
|
352
|
+
SYLogger.info(f"[Sandbox Server] 读取完成: {len(selected)} 行")
|
|
353
|
+
return ReadResponse(content=content, error=None)
|
|
339
354
|
|
|
340
355
|
except Exception as e:
|
|
356
|
+
SYLogger.error(f"[Sandbox Server] 读取异常: {e}")
|
|
341
357
|
return ReadResponse(error=str(e), content=None)
|
|
342
358
|
|
|
343
359
|
@sandbox_router.post("/write", response_model=WriteResponse)
|
|
@@ -349,10 +365,13 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
349
365
|
if not os.path.isabs(file_path):
|
|
350
366
|
file_path = os.path.join(workspace, file_path)
|
|
351
367
|
|
|
368
|
+
SYLogger.info(f"[Sandbox Server] 写入文件: {file_path}")
|
|
369
|
+
|
|
352
370
|
try:
|
|
353
371
|
content = base64.b64decode(req.content).decode('utf-8')
|
|
354
372
|
|
|
355
373
|
if os.path.exists(file_path):
|
|
374
|
+
SYLogger.error(f"[Sandbox Server] 写入失败: 文件已存在 {file_path}")
|
|
356
375
|
return WriteResponse(error=f"File '{file_path}' already exists", path=None)
|
|
357
376
|
|
|
358
377
|
parent = os.path.dirname(file_path)
|
|
@@ -362,9 +381,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
362
381
|
with open(file_path, 'w') as f:
|
|
363
382
|
f.write(content)
|
|
364
383
|
|
|
384
|
+
SYLogger.info(f"[Sandbox Server] 写入成功: {file_path} ({len(content)} 字符)")
|
|
365
385
|
return WriteResponse(error=None, path=file_path)
|
|
366
386
|
|
|
367
387
|
except Exception as e:
|
|
388
|
+
SYLogger.error(f"[Sandbox Server] 写入异常: {e}")
|
|
368
389
|
return WriteResponse(error=str(e), path=None)
|
|
369
390
|
|
|
370
391
|
@sandbox_router.post("/edit", response_model=EditResponse)
|
|
@@ -376,11 +397,14 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
376
397
|
if not os.path.isabs(file_path):
|
|
377
398
|
file_path = os.path.join(workspace, file_path)
|
|
378
399
|
|
|
400
|
+
SYLogger.info(f"[Sandbox Server] 编辑文件: {file_path}")
|
|
401
|
+
|
|
379
402
|
try:
|
|
380
403
|
old_string = base64.b64decode(req.old_string).decode('utf-8')
|
|
381
404
|
new_string = base64.b64decode(req.new_string).decode('utf-8')
|
|
382
405
|
|
|
383
406
|
if not os.path.isfile(file_path):
|
|
407
|
+
SYLogger.error(f"[Sandbox Server] 编辑失败: 文件不存在 {file_path}")
|
|
384
408
|
return EditResponse(error=f"File '{file_path}' not found")
|
|
385
409
|
|
|
386
410
|
with open(file_path, 'r') as f:
|
|
@@ -389,8 +413,10 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
389
413
|
count = content.count(old_string)
|
|
390
414
|
|
|
391
415
|
if count == 0:
|
|
416
|
+
SYLogger.error(f"[Sandbox Server] 编辑失败: 未找到匹配字符串")
|
|
392
417
|
return EditResponse(error=f"String not found: '{old_string[:50]}...'")
|
|
393
418
|
if count > 1 and not req.replace_all:
|
|
419
|
+
SYLogger.error(f"[Sandbox Server] 编辑失败: 多处匹配 ({count}次)")
|
|
394
420
|
return EditResponse(
|
|
395
421
|
error=f"String appears {count} times. Use replace_all=True to replace all."
|
|
396
422
|
)
|
|
@@ -403,9 +429,11 @@ def setup_sandbox_handler(app: FastAPI, config: dict = None):
|
|
|
403
429
|
with open(file_path, 'w') as f:
|
|
404
430
|
f.write(new_content)
|
|
405
431
|
|
|
432
|
+
SYLogger.info(f"[Sandbox Server] 编辑成功: {file_path} (替换 {count} 处)")
|
|
406
433
|
return EditResponse(error=None, path=file_path, occurrences=count)
|
|
407
434
|
|
|
408
435
|
except Exception as e:
|
|
436
|
+
SYLogger.error(f"[Sandbox Server] 编辑异常: {e}")
|
|
409
437
|
return EditResponse(error=str(e))
|
|
410
438
|
|
|
411
439
|
@sandbox_router.post("/upload", response_model=UploadResponse)
|
|
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.1a0 → sycommon_python_lib-0.2.1a2}/src/command/templates/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/templates/agent/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/command/templates/base/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/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.1a0 → sycommon_python_lib-0.2.1a2}/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.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/sandbox/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/sandbox/file_ops.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/sandbox/session.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/skills/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/skills/exports.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/agent/virtual_employee.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/DatabaseConfig.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/EmbeddingConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/LLMConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/LangfuseConfig.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/RedisConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/RerankerConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/config/SentryConfig.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/database/base_db_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/database/redis_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/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.1a0 → sycommon_python_lib-0.2.1a2}/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.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/async_sql_logger.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/kafka_log.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/logger_levels.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/logger_wrapper.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/process_logger.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/logging/sql_logger.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/exception.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/timeout.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/middleware/traceid.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/base_http.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/mqlistener_config.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/mqmsg_model.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/mqsend_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/token_usage.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/models/token_usage_mysql.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/notice/uvicorn_monitor.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/rabbitmq/rabbitmq_client.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/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.1a0 → sycommon_python_lib-0.2.1a2}/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.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/example2.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/feign_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/synacos/nacos_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tests/deep_agent_server.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tests/test_deep_agent.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tests/test_email.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/src/sycommon/tools/async_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.1a0 → sycommon_python_lib-0.2.1a2}/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
|