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.
Files changed (165) hide show
  1. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/sandbox.py +97 -34
  4. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  5. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/README.md +0 -0
  6. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/setup.cfg +0 -0
  7. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/__init__.py +0 -0
  8. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/cli.py +0 -0
  9. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/core/__init__.py +0 -0
  10. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/core/console.py +0 -0
  11. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/core/models.py +0 -0
  12. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/core/project.py +0 -0
  13. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/core/utils.py +0 -0
  14. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/__init__.py +0 -0
  15. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/agent/__init__.py +0 -0
  16. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/base/__init__.py +0 -0
  17. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/command/templates/web/__init__.py +0 -0
  18. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/__init__.py +0 -0
  19. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/__init__.py +0 -0
  20. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/01_basic_agent.py +0 -0
  21. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/02_tool_agent.py +0 -0
  22. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/03_structured_output.py +0 -0
  23. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/04_memory_agent.py +0 -0
  24. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/05_streaming.py +0 -0
  25. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/06_multi_agent.py +0 -0
  26. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/07_skills_agent.py +0 -0
  27. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/08_middleware.py +0 -0
  28. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/09_interrupt.py +0 -0
  29. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/10_custom_llm.py +0 -0
  30. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/11_complex_workflow.py +0 -0
  31. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/12_batch_processing.py +0 -0
  32. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/__init__.py +0 -0
  33. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/01_basic_monitoring.py +0 -0
  34. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/02_permission_control.py +0 -0
  35. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/03_tool_skill_filter.py +0 -0
  36. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/04_caching_retry.py +0 -0
  37. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/05_sanitization.py +0 -0
  38. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/06_tracking.py +0 -0
  39. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/07_advanced.py +0 -0
  40. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/08_progressive_skills.py +0 -0
  41. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/__init__.py +0 -0
  42. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/middleware/override_examples.py +0 -0
  43. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/examples/virtual_employee_demo.py +0 -0
  44. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/exports.py +0 -0
  45. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/get_agent.py +0 -0
  46. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/__init__.py +0 -0
  47. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  48. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  49. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  50. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/sandbox/session.py +0 -0
  51. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/skills/__init__.py +0 -0
  52. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/skills/examples/faq_handler/scripts/search.py +0 -0
  53. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/skills/exports.py +0 -0
  54. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/agent/virtual_employee.py +0 -0
  55. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/Config.py +0 -0
  56. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/DatabaseConfig.py +0 -0
  57. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  58. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/EmbeddingConfig.py +0 -0
  59. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/LLMConfig.py +0 -0
  60. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/LangfuseConfig.py +0 -0
  61. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/MQConfig.py +0 -0
  62. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/RedisConfig.py +0 -0
  63. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/RerankerConfig.py +0 -0
  64. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/SentryConfig.py +0 -0
  65. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/config/__init__.py +0 -0
  66. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/async_base_db_service.py +0 -0
  67. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/async_database_service.py +0 -0
  68. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/base_db_service.py +0 -0
  69. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/database_service.py +0 -0
  70. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/elasticsearch_service.py +0 -0
  71. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/redis_service.py +0 -0
  72. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/database/token_usage_db_service.py +0 -0
  73. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/health/__init__.py +0 -0
  74. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/health/health_check.py +0 -0
  75. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/health/metrics.py +0 -0
  76. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/health/ping.py +0 -0
  77. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/heartbeat_process/__init__.py +0 -0
  78. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  79. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  80. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  81. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/__init__.py +0 -0
  82. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/embedding.py +0 -0
  83. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/get_llm.py +0 -0
  84. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/llm_logger.py +0 -0
  85. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/llm_tokens.py +0 -0
  86. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  87. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  88. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  89. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/struct_token.py +0 -0
  90. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/sy_langfuse.py +0 -0
  91. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/token_usage_es_service.py +0 -0
  92. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  93. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/llm/usage_token.py +0 -0
  94. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/__init__.py +0 -0
  95. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/async_sql_logger.py +0 -0
  96. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/kafka_log.py +0 -0
  97. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/logger_levels.py +0 -0
  98. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/logger_wrapper.py +0 -0
  99. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/process_logger.py +0 -0
  100. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/logging/sql_logger.py +0 -0
  101. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/__init__.py +0 -0
  102. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/context.py +0 -0
  103. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/cors.py +0 -0
  104. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/docs.py +0 -0
  105. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/exception.py +0 -0
  106. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/middleware.py +0 -0
  107. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/monitor_memory.py +0 -0
  108. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/mq.py +0 -0
  109. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/timeout.py +0 -0
  110. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/middleware/traceid.py +0 -0
  111. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/__init__.py +0 -0
  112. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/base_http.py +0 -0
  113. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/log.py +0 -0
  114. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/mqlistener_config.py +0 -0
  115. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/mqmsg_model.py +0 -0
  116. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/mqsend_config.py +0 -0
  117. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/sso_user.py +0 -0
  118. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/token_usage.py +0 -0
  119. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/models/token_usage_mysql.py +0 -0
  120. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/notice/__init__.py +0 -0
  121. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  122. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  123. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  124. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  125. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  126. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  127. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  128. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  129. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  130. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  131. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/sentry/__init__.py +0 -0
  132. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/sentry/sy_sentry.py +0 -0
  133. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/services.py +0 -0
  134. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/sse/__init__.py +0 -0
  135. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/sse/event.py +0 -0
  136. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/sse/sse.py +0 -0
  137. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/__init__.py +0 -0
  138. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/example.py +0 -0
  139. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/example2.py +0 -0
  140. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/feign.py +0 -0
  141. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/feign_client.py +0 -0
  142. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_client_base.py +0 -0
  143. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  144. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  145. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_service.py +0 -0
  146. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  147. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  148. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/synacos/param.py +0 -0
  149. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tests/deep_agent_server.py +0 -0
  150. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tests/test_deep_agent.py +0 -0
  151. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tests/test_email.py +0 -0
  152. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tests/test_mq.py +0 -0
  153. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/__init__.py +0 -0
  154. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/async_utils.py +0 -0
  155. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/docs.py +0 -0
  156. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/env.py +0 -0
  157. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/merge_headers.py +0 -0
  158. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/snowflake.py +0 -0
  159. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/syemail.py +0 -0
  160. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon/tools/timing.py +0 -0
  161. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
  162. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  163. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  164. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  165. {sycommon_python_lib-0.2.1a3 → sycommon_python_lib-0.2.1a5}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.1a3
3
+ Version: 0.2.1a5
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.2.1a3"
3
+ version = "0.2.1a5"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -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
- # 默认工作目录使用系统临时目录,跨平台兼容 (Windows/Linux/Mac)
24
- _default_workspace = os.path.join(tempfile.gettempdir(), "sycommon_sandbox")
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
- target_path = req.path
292
-
293
- if not os.path.isabs(target_path):
294
- target_path = os.path.join(workspace, target_path)
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
- file_path = req.file_path
325
-
326
- if not os.path.isabs(file_path):
327
- file_path = os.path.join(workspace, file_path)
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
- file_path = req.file_path
364
-
365
- if not os.path.isabs(file_path):
366
- file_path = os.path.join(workspace, file_path)
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
- file_path = req.file_path
396
-
397
- if not os.path.isabs(file_path):
398
- file_path = os.path.join(workspace, file_path)
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
- file_path = req.path
444
-
445
- if not os.path.isabs(file_path):
446
- file_path = os.path.join(workspace, file_path)
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
- file_path = req.path
468
-
469
- if not os.path.isabs(file_path):
470
- file_path = os.path.join(workspace, file_path)
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
- search_path = req.path
494
-
495
- if not os.path.isabs(search_path):
496
- search_path = os.path.join(workspace, search_path)
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
- search_path = req.path or workspace
521
-
522
- if not os.path.isabs(search_path):
523
- search_path = os.path.join(workspace, search_path)
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"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.1a3
3
+ Version: 0.2.1a5
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown