sycommon-python-lib 0.2.7a18__tar.gz → 0.2.7a19__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 (334) hide show
  1. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/middleware/sandbox_path_guard.py +35 -18
  4. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/multi_agent_team.py +3 -0
  5. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  6. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon_python_lib.egg-info/SOURCES.txt +1 -0
  7. sycommon_python_lib-0.2.7a19/tests/test_sandbox_path_guard.py +297 -0
  8. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/README.md +0 -0
  9. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/setup.cfg +0 -0
  10. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/__init__.py +0 -0
  11. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/cli.py +0 -0
  12. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/core/__init__.py +0 -0
  13. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/core/console.py +0 -0
  14. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/core/models.py +0 -0
  15. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/core/project.py +0 -0
  16. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/core/utils.py +0 -0
  17. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/__init__.py +0 -0
  18. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/README.md.tpl +0 -0
  19. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/__init__.py +0 -0
  20. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  21. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  22. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  23. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  24. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  25. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  26. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  27. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/api/query.py.tpl +0 -0
  28. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  29. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/app.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/db/service.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/model/parse.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/.env.tpl +0 -0
  41. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/.gitignore.tpl +0 -0
  42. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/Dockerfile.tpl +0 -0
  43. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/README.md.tpl +0 -0
  44. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/__init__.py +0 -0
  45. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/app.py.tpl +0 -0
  46. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/app.yaml.tpl +0 -0
  47. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  48. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/client/__init__.py.tpl +0 -0
  49. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/model/__init__.py.tpl +0 -0
  50. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/model/file_info.py.tpl +0 -0
  51. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/base/requirements.txt.tpl +0 -0
  52. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/cli/README.md.tpl +0 -0
  53. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/cli/__init__.py +0 -0
  54. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/cli/app.py.tpl +0 -0
  55. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  56. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  57. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  58. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  59. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/web/README.md.tpl +0 -0
  60. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/web/__init__.py +0 -0
  61. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/web/api/__init__.py.tpl +0 -0
  62. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/web/api/echo.py.tpl +0 -0
  63. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  64. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  65. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/web/app.py.tpl +0 -0
  66. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/web/client/__init__.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/web/model/__init__.py.tpl +0 -0
  68. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  69. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/command/templates/web/tools/mq.py.tpl +0 -0
  70. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/nexus/__init__.py +0 -0
  71. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/__init__.py +0 -0
  72. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/__main__.py +0 -0
  73. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/acp/__init__.py +0 -0
  74. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/acp/config.py +0 -0
  75. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/acp/executor.py +0 -0
  76. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/acp/registry.py +0 -0
  77. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/acp/server.py +0 -0
  78. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/agents/__init__.py +0 -0
  79. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/agents/factory.py +0 -0
  80. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/agents/prompts.py +0 -0
  81. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/__init__.py +0 -0
  82. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/browser.py +0 -0
  83. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/capabilities/__init__.py +0 -0
  84. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/capabilities/console.py +0 -0
  85. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/capabilities/dom.py +0 -0
  86. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/capabilities/network.py +0 -0
  87. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  88. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/capabilities/performance.py +0 -0
  89. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  90. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/client.py +0 -0
  91. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/protocol.py +0 -0
  92. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cdp/repl.py +0 -0
  93. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/cli.py +0 -0
  94. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/commands/__init__.py +0 -0
  95. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/commands/acp_cmd.py +0 -0
  96. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/commands/cdp_cmd.py +0 -0
  97. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/commands/chat_cmd.py +0 -0
  98. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/commands/create_cmd.py +0 -0
  99. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/commands/evaluate_cmd.py +0 -0
  100. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/commands/init_cmd.py +0 -0
  101. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/commands/memory_cmd.py +0 -0
  102. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/commands/resume_cmd.py +0 -0
  103. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/commands/rollback_cmd.py +0 -0
  104. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/commands/run_cmd.py +0 -0
  105. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/core/__init__.py +0 -0
  106. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/core/backend.py +0 -0
  107. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/core/config.py +0 -0
  108. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/core/display.py +0 -0
  109. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/core/git_integration.py +0 -0
  110. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/core/llm.py +0 -0
  111. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/core/state.py +0 -0
  112. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/evaluate/__init__.py +0 -0
  113. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/evaluate/api_evaluator.py +0 -0
  114. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/memory/__init__.py +0 -0
  115. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/memory/compressor.py +0 -0
  116. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/memory/full.py +0 -0
  117. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/memory/hot.py +0 -0
  118. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/memory/manager.py +0 -0
  119. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/memory/warm.py +0 -0
  120. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/mode/__init__.py +0 -0
  121. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/mode/create.py +0 -0
  122. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/mode/optimize.py +0 -0
  123. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/models/__init__.py +0 -0
  124. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/models/config_models.py +0 -0
  125. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/__init__.py +0 -0
  126. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/baseline_tests.py +0 -0
  127. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/checkpoint.py +0 -0
  128. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/convergence.py +0 -0
  129. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/diagnosis.py +0 -0
  130. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/engine.py +0 -0
  131. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/environment.py +0 -0
  132. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/experience.py +0 -0
  133. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/harness_prompts.py +0 -0
  134. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/history.py +0 -0
  135. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/optimization_logger.py +0 -0
  136. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/pre_validation.py +0 -0
  137. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/reward.py +0 -0
  138. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/strategy_bandit.py +0 -0
  139. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/strategy_generator.py +0 -0
  140. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/rl/strategy_prompts.py +0 -0
  141. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/simple_chat_agent.py +0 -0
  142. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycli/skills/__init__.py +0 -0
  143. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/__init__.py +0 -0
  144. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/__init__.py +0 -0
  145. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/acp/__init__.py +0 -0
  146. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/acp/client.py +0 -0
  147. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/acp/fetch.py +0 -0
  148. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/acp/ssh_init.py +0 -0
  149. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/acp/tool.py +0 -0
  150. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/agent_manager.py +0 -0
  151. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/chat_events.py +0 -0
  152. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/deep_agent.py +0 -0
  153. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/mcp/__init__.py +0 -0
  154. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/mcp/models.py +0 -0
  155. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/mcp/tool_loader.py +0 -0
  156. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/middleware/sensitive_guard.py +0 -0
  157. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/middleware/sitecustomize.py +0 -0
  158. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/middleware/skill_api_whitelist.py +0 -0
  159. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/middleware/skill_wl_check.py +0 -0
  160. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/middleware/skill_write_guard.py +0 -0
  161. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/sandbox/__init__.py +0 -0
  162. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/sandbox/consistent_hash.py +0 -0
  163. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  164. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  165. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
  166. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  167. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  168. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/sandbox/session.py +0 -0
  169. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/agent/summarization_utils.py +0 -0
  170. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/auth/__init__.py +0 -0
  171. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/auth/ldap_service.py +0 -0
  172. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/auth/oa_cache.py +0 -0
  173. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/auth/oa_crypto.py +0 -0
  174. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/auth/oa_service.py +0 -0
  175. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  176. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/ACPAgentConfig.py +0 -0
  177. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/Config.py +0 -0
  178. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/DatabaseConfig.py +0 -0
  179. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  180. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/EmbeddingConfig.py +0 -0
  181. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/LLMConfig.py +0 -0
  182. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/LangfuseConfig.py +0 -0
  183. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/MQConfig.py +0 -0
  184. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/PgConfig.py +0 -0
  185. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/RedisConfig.py +0 -0
  186. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/RerankerConfig.py +0 -0
  187. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/SentryConfig.py +0 -0
  188. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/SkillApiWhitelistConfig.py +0 -0
  189. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/XxlJobConfig.py +0 -0
  190. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/__init__.py +0 -0
  191. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/config/config_change_notifier.py +0 -0
  192. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/database/async_base_db_service.py +0 -0
  193. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/database/async_database_service.py +0 -0
  194. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/database/base_db_service.py +0 -0
  195. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/database/database_service.py +0 -0
  196. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/database/elasticsearch_service.py +0 -0
  197. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/database/pg_checkpoint_service.py +0 -0
  198. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/database/redis_service.py +0 -0
  199. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/database/resilient_pg_saver.py +0 -0
  200. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/database/token_usage_db_service.py +0 -0
  201. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/health/__init__.py +0 -0
  202. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/health/health_check.py +0 -0
  203. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/health/metrics.py +0 -0
  204. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/health/ping.py +0 -0
  205. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/heartbeat_process/__init__.py +0 -0
  206. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  207. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  208. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  209. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/__init__.py +0 -0
  210. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/embedding.py +0 -0
  211. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/get_llm.py +0 -0
  212. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/llm_logger.py +0 -0
  213. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/llm_tokens.py +0 -0
  214. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  215. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  216. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  217. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/struct_token.py +0 -0
  218. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/sy_langfuse.py +0 -0
  219. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  220. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
  221. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/token_usage_es_service.py +0 -0
  222. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  223. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/token_utils.py +0 -0
  224. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/llm/usage_token.py +0 -0
  225. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/logging/__init__.py +0 -0
  226. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/logging/async_sql_logger.py +0 -0
  227. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/logging/kafka_log.py +0 -0
  228. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/logging/log_masker.py +0 -0
  229. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/logging/logger_levels.py +0 -0
  230. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/logging/logger_wrapper.py +0 -0
  231. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/logging/process_logger.py +0 -0
  232. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/logging/sql_logger.py +0 -0
  233. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/mcp_server/__init__.py +0 -0
  234. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/mcp_server/server.py +0 -0
  235. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/__init__.py +0 -0
  236. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/context.py +0 -0
  237. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/cors.py +0 -0
  238. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/docs.py +0 -0
  239. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/exception.py +0 -0
  240. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/middleware.py +0 -0
  241. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/monitor_memory.py +0 -0
  242. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/mq.py +0 -0
  243. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/sandbox.py +0 -0
  244. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/timeout.py +0 -0
  245. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/token_tracking.py +0 -0
  246. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/tool_result_truncation.py +0 -0
  247. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/middleware/traceid.py +0 -0
  248. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/__init__.py +0 -0
  249. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/base_http.py +0 -0
  250. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/log.py +0 -0
  251. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/mcp_server_config.py +0 -0
  252. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/mqlistener_config.py +0 -0
  253. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/mqmsg_model.py +0 -0
  254. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/mqsend_config.py +0 -0
  255. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/sandbox.py +0 -0
  256. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/sso_user.py +0 -0
  257. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/token_usage.py +0 -0
  258. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/token_usage_mysql.py +0 -0
  259. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/models/xxljob_handler_config.py +0 -0
  260. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/notice/__init__.py +0 -0
  261. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  262. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/notice/wecom_message.py +0 -0
  263. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  264. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  265. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  266. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  267. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  268. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  269. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  270. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  271. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  272. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/sentry/__init__.py +0 -0
  273. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/sentry/sy_sentry.py +0 -0
  274. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/services.py +0 -0
  275. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/sse/__init__.py +0 -0
  276. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/sse/event.py +0 -0
  277. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/sse/sse.py +0 -0
  278. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/__init__.py +0 -0
  279. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/example.py +0 -0
  280. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/example2.py +0 -0
  281. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/feign.py +0 -0
  282. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/feign_client.py +0 -0
  283. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/nacos_client_base.py +0 -0
  284. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  285. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  286. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/nacos_service.py +0 -0
  287. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  288. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  289. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/synacos/param.py +0 -0
  290. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/deep_agent_server.py +0 -0
  291. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_consistent_hash.py +0 -0
  292. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_consumer_loss_rootcause.py +0 -0
  293. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_consumer_recovery.py +0 -0
  294. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_deep_agent.py +0 -0
  295. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
  296. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_email.py +0 -0
  297. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_encoding_cache.py +0 -0
  298. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_fix_verification.py +0 -0
  299. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_mcp_server.py +0 -0
  300. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
  301. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_mq.py +0 -0
  302. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_oa_login.py +0 -0
  303. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_queue_priority_fallback.py +0 -0
  304. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_real_summarization.py +0 -0
  305. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_summarization_config.py +0 -0
  306. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_summarization_real.py +0 -0
  307. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tests/test_summary_leak_e2e.py +0 -0
  308. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tools/__init__.py +0 -0
  309. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tools/async_utils.py +0 -0
  310. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tools/docs.py +0 -0
  311. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tools/env.py +0 -0
  312. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tools/merge_headers.py +0 -0
  313. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tools/snowflake.py +0 -0
  314. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tools/syemail.py +0 -0
  315. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/tools/timing.py +0 -0
  316. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/xxljob/__init__.py +0 -0
  317. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon/xxljob/xxljob_service.py +0 -0
  318. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  319. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  320. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  321. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  322. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_acp_tool.py +0 -0
  323. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_asyncio_logging.py +0 -0
  324. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_config_change_notifier.py +0 -0
  325. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_hotreload_snapshot.py +0 -0
  326. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_llm_apikey_contextvar.py +0 -0
  327. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_log_masker.py +0 -0
  328. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_resilient_pg_saver.py +0 -0
  329. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_sensitive_guard.py +0 -0
  330. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_simple_chat_agent.py +0 -0
  331. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_skill_regex_upgrade.py +0 -0
  332. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_skill_write_guard.py +0 -0
  333. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_sycli.py +0 -0
  334. {sycommon_python_lib-0.2.7a18 → sycommon_python_lib-0.2.7a19}/tests/test_sync_skills_to_sandbox.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.7a18
3
+ Version: 0.2.7a19
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.7a18"
3
+ version = "0.2.7a19"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -44,8 +44,10 @@ except Exception: # 测试/独立引入环境兜底,行为与 sandbox.py 保持
44
44
  _WORKSPACE_ROOT = os.path.realpath(WORKSPACE_BASE).rstrip(os.sep)
45
45
 
46
46
 
47
- # 工具 → 路径字段名映射(结构化参数,可安全改写/拦截)
48
- # get_share_url 是 app(base_tools)自定义工具,同样吃 file_path,纳入统一约束。
47
+ # 工具 → 路径字段名(单字段)或多字段(列表)映射(结构化参数,可安全改写/拦截)
48
+ # get_share_url 是 app(base_tools)自定义工具,吃 file_path;
49
+ # transfer_file 是 bridge/multi 模式注入的跨沙箱传输工具,吃 src_path + dst_path,
50
+ # 两个路径字段都要过同一套越权校验(否则 agent 可借它绕过,把别人的绝对路径文件传出来)。
49
51
  _PATH_TOOLS = {
50
52
  "read_file": "file_path",
51
53
  "write_file": "file_path",
@@ -54,6 +56,7 @@ _PATH_TOOLS = {
54
56
  "glob": "path",
55
57
  "grep": "path",
56
58
  "get_share_url": "file_path",
59
+ "transfer_file": ["src_path", "dst_path"],
57
60
  }
58
61
 
59
62
  # 宿主沙箱根前缀(用于 execute 命令串扫描;shell 里无法安全改写,只能拦)。
@@ -114,22 +117,36 @@ class SandboxPathGuardMiddleware(AgentMiddleware):
114
117
  if not isinstance(args, dict):
115
118
  return await handler(request)
116
119
 
117
- # 1) 结构化路径工具:read/write/edit/ls/grep/glob/get_share_url
118
- field = _PATH_TOOLS.get(name)
119
- if field:
120
- raw = args.get(field)
121
- if isinstance(raw, str) and _is_host_absolute(raw):
122
- if self._self_ws and _within_self_workspace(raw, self._self_ws):
123
- # 自己工作目录内的绝对路径 改写为虚拟路径放行(零往返)
124
- new_tc = dict(tc)
125
- new_args = dict(args)
126
- new_args[field] = _to_virtual(raw, self._self_ws)
127
- new_tc["args"] = new_args
128
- new_request = dataclasses.replace(request, tool_call=new_tc)
129
- return await handler(new_request)
130
- # 越界/跨用户宿主绝对路径 → 拦截
131
- return ToolMessage(content=_DENIED_MSG, name=name,
132
- tool_call_id=tc.get("id", ""), status="error")
120
+ # 1) 结构化路径工具:read/write/edit/ls/grep/glob/get_share_url/transfer_file
121
+ # 字段规格可为单字段(str)或多字段(list);多字段工具(如 transfer_file
122
+ # 的 src_path+dst_path)任一字段越界即拦整个调用,防借传输绕过读他人文件。
123
+ fields_spec = _PATH_TOOLS.get(name)
124
+ if fields_spec:
125
+ fields = [fields_spec] if isinstance(fields_spec, str) else list(fields_spec)
126
+ rewrites = {} # field -> 改写后的虚拟路径
127
+ for field in fields:
128
+ raw = args.get(field)
129
+ if not isinstance(raw, str):
130
+ continue
131
+ # transfer_file 支持 sandbox:<名称>: 前缀指定源/目标沙箱,剥掉前缀再判路径本身
132
+ path_part = raw.split(":", 2)[-1] if raw.startswith("sandbox:") else raw
133
+ if not _is_host_absolute(path_part):
134
+ continue
135
+ if self._self_ws and _within_self_workspace(path_part, self._self_ws):
136
+ # 自己工作目录内的绝对路径 → 改写为虚拟路径(剥前缀后改写,前缀保留)
137
+ virtual = _to_virtual(path_part, self._self_ws)
138
+ rewrites[field] = (raw[:len(raw) - len(path_part)] + virtual) \
139
+ if raw.startswith("sandbox:") else virtual
140
+ else:
141
+ # 越界/跨用户宿主绝对路径 → 整个调用拦
142
+ return ToolMessage(content=_DENIED_MSG, name=name,
143
+ tool_call_id=tc.get("id", ""), status="error")
144
+ if rewrites:
145
+ new_args = dict(args)
146
+ new_args.update(rewrites)
147
+ new_tc = dict(tc)
148
+ new_tc["args"] = new_args
149
+ return await handler(dataclasses.replace(request, tool_call=new_tc))
133
150
  return await handler(request)
134
151
 
135
152
  # 2) execute(裸 shell):命令串里的宿主绝对路径无法安全改写,只能拦
@@ -46,6 +46,7 @@ from sycommon.agent.chat_events import ChatEvent, ChatEventBuilder, DEFAULT_AGEN
46
46
  from sycommon.middleware.token_tracking import TokenTrackingMiddleware
47
47
  from sycommon.middleware.tool_result_truncation import ToolResultTruncationMiddleware
48
48
  from sycommon.agent.middleware.skill_write_guard import SkillWriteGuardMiddleware
49
+ from sycommon.agent.middleware.sandbox_path_guard import SandboxPathGuardMiddleware
49
50
  from sycommon.agent.middleware.sensitive_guard import (
50
51
  SensitiveGuardMiddleware, DowngradeState,
51
52
  )
@@ -643,6 +644,7 @@ async def create_multi_agent_team(
643
644
  TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
644
645
  summarization_mw,
645
646
  SkillWriteGuardMiddleware(),
647
+ SandboxPathGuardMiddleware(user_id),
646
648
  ]
647
649
  shared = config.shared_tools or [get_current_date]
648
650
 
@@ -701,6 +703,7 @@ async def create_multi_agent_team(
701
703
  TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
702
704
  coord_summarization_mw,
703
705
  SkillWriteGuardMiddleware(),
706
+ SandboxPathGuardMiddleware(user_id),
704
707
  ],
705
708
  )
706
709
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.7a18
3
+ Version: 0.2.7a19
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -323,6 +323,7 @@ tests/test_hotreload_snapshot.py
323
323
  tests/test_llm_apikey_contextvar.py
324
324
  tests/test_log_masker.py
325
325
  tests/test_resilient_pg_saver.py
326
+ tests/test_sandbox_path_guard.py
326
327
  tests/test_sensitive_guard.py
327
328
  tests/test_simple_chat_agent.py
328
329
  tests/test_skill_regex_upgrade.py
@@ -0,0 +1,297 @@
1
+ """SandboxPathGuardMiddleware: 规范化/拦截沙箱工具调用里的宿主绝对路径。
2
+
3
+ 不实例化沙箱,纯逻辑测 awrap_tool_call:构造假 request + handler,断言三态
4
+ (拦截返回 error ToolMessage / 改写 args 后放行 / 原样放行)。
5
+
6
+ 测试用 tmp_path 作 WORKSPACE_BASE,避免依赖产线 /data/sycommon_sandbox。
7
+ 通过 monkeypatch 替换模块级 _WORKSPACE_ROOT / WORKSPACE_BASE / _HOST_SANDBOX_RE,
8
+ 保证「middleware 算的前缀」就是测试构造的临时根。
9
+ """
10
+ import os
11
+ import re
12
+ import sys
13
+
14
+ import pytest
15
+ from langgraph.prebuilt.tool_node import ToolCallRequest
16
+
17
+ sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "src"))
18
+
19
+ from sycommon.agent.middleware import sandbox_path_guard as spg
20
+ from sycommon.agent.middleware.sandbox_path_guard import (
21
+ SandboxPathGuardMiddleware, _is_host_absolute, _within_self_workspace,
22
+ _to_virtual, _sanitize_user_id,
23
+ )
24
+
25
+
26
+ # ============== fixtures: 把工作根钉到 tmp_path ==============
27
+
28
+ @pytest.fixture
29
+ def workspace(tmp_path, monkeypatch):
30
+ """用一个真实临时目录作 WORKSPACE_BASE,并重算模块级锚点。
31
+
32
+ _WORKSPACE_ROOT 是模块加载时 realpath 算出的,测试必须 monkeypatch 它,
33
+ 否则 _is_host_absolute 会按真实沙箱根(/data/sycommon_sandbox 或 tempdir)判,
34
+ 与测试构造的路径对不上。
35
+ """
36
+ root = os.path.realpath(str(tmp_path)).rstrip(os.sep)
37
+ monkeypatch.setattr(spg, "WORKSPACE_BASE", root)
38
+ monkeypatch.setattr(spg, "_WORKSPACE_ROOT", root)
39
+ monkeypatch.setattr(spg, "_HOST_SANDBOX_RE",
40
+ re.compile(re.escape(root) + r'(?:/|\\)'))
41
+ return root
42
+
43
+
44
+ def _self_ws(workspace, user="osulcode.xiao"):
45
+ return os.path.join(workspace, _sanitize_user_id(user))
46
+
47
+
48
+ def _req(name, args):
49
+ call = {"name": name, "args": args, "id": "call_1", "type": "tool_call"}
50
+ return ToolCallRequest(tool_call=call, tool=None, state={}, runtime=None)
51
+
52
+
53
+ # ============== 纯函数 ==============
54
+
55
+ def test_is_host_absolute_virtual_relative_false(workspace):
56
+ assert not _is_host_absolute("/skills/system/x/SKILL.md")
57
+ assert not _is_host_absolute("./output/report.pdf")
58
+ assert not _is_host_absolute("result.xlsx")
59
+ assert not _is_host_absolute("")
60
+
61
+
62
+ def test_is_host_absolute_root_outside_false(workspace):
63
+ # 沙箱根之外的宿主路径不算(沙箱里本就读不到,留给服务端 not found)
64
+ assert not _is_host_absolute("/etc/passwd")
65
+ assert not _is_host_absolute("/tmp/anything")
66
+
67
+
68
+ def test_is_host_absolute_within_root_true(workspace):
69
+ p = os.path.join(workspace, "osulcode.xiao", "skills", "x.py")
70
+ assert _is_host_absolute(p)
71
+ assert _is_host_absolute(workspace) # 根本身
72
+
73
+
74
+ def test_within_self_workspace(workspace):
75
+ self_ws = _self_ws(workspace)
76
+ mine = os.path.join(self_ws, "skills", "a.py")
77
+ other = os.path.join(workspace, "gary.liu", "skills", "a.py")
78
+ assert _within_self_workspace(mine, self_ws)
79
+ assert not _within_self_workspace(other, self_ws)
80
+
81
+
82
+ def test_to_virtual(workspace):
83
+ self_ws = _self_ws(workspace)
84
+ p = os.path.join(self_ws, "skills", "system", "x", "SKILL.md")
85
+ assert _to_virtual(p, self_ws) == "/skills/system/x/SKILL.md"
86
+ assert _to_virtual(self_ws, self_ws) == "/" # 工作目录根
87
+
88
+
89
+ def test_to_virtual_posix_separators(workspace):
90
+ r"""虚拟路径必须用 / 分隔,不出现反斜杠。"""
91
+ self_ws = _self_ws(workspace)
92
+ p = os.path.join(self_ws, "output", "report.pdf")
93
+ v = _to_virtual(p, self_ws)
94
+ assert "\\" not in v
95
+ assert v == "/output/report.pdf"
96
+
97
+
98
+ # ============== awrap_tool_call: read_file ==============
99
+
100
+ @pytest.mark.asyncio
101
+ async def test_read_file_virtual_passthrough(workspace):
102
+ mw = SandboxPathGuardMiddleware("osulcode.xiao")
103
+
104
+ async def handler(req):
105
+ return "REACHED"
106
+
107
+ res = await mw.awrap_tool_call(
108
+ _req("read_file", {"file_path": "/skills/system/x/SKILL.md"}), handler)
109
+ assert res == "REACHED"
110
+
111
+
112
+ @pytest.mark.asyncio
113
+ async def test_read_file_self_abs_path_rewritten(workspace):
114
+ """自己工作目录的宿主绝对路径 → 改写为虚拟路径,放行。"""
115
+ mw = SandboxPathGuardMiddleware("osulcode.xiao")
116
+ self_ws = _self_ws(workspace)
117
+ abs_path = os.path.join(self_ws, "skills", "system", "x", "SKILL.md")
118
+ seen = {}
119
+
120
+ async def handler(req):
121
+ seen["args"] = req.tool_call["args"]
122
+ return "REACHED"
123
+
124
+ res = await mw.awrap_tool_call(
125
+ _req("read_file", {"file_path": abs_path}), handler)
126
+ assert res == "REACHED"
127
+ assert seen["args"]["file_path"] == "/skills/system/x/SKILL.md"
128
+
129
+
130
+ @pytest.mark.asyncio
131
+ async def test_read_file_cross_user_abs_path_denied(workspace):
132
+ """别人的工作目录宿主绝对路径 → 拦截。"""
133
+ mw = SandboxPathGuardMiddleware("osulcode.xiao")
134
+ other = os.path.join(workspace, "gary.liu", "skills", "x", "SKILL.md")
135
+ called = {"n": 0}
136
+
137
+ async def handler(req):
138
+ called["n"] += 1
139
+ return "REACHED"
140
+
141
+ res = await mw.awrap_tool_call(_req("read_file", {"file_path": other}), handler)
142
+ assert called["n"] == 0
143
+ assert res.status == "error"
144
+ assert "宿主机绝对路径" in str(res.content)
145
+
146
+
147
+ # ============== awrap_tool_call: transfer_file(多字段) ==============
148
+
149
+ @pytest.mark.asyncio
150
+ async def test_transfer_file_both_relative_passthrough(workspace):
151
+ mw = SandboxPathGuardMiddleware("osulcode.xiao")
152
+
153
+ async def handler(req):
154
+ return "REACHED"
155
+
156
+ res = await mw.awrap_tool_call(
157
+ _req("transfer_file", {"src_path": "./a.py", "dst_path": "./b.py",
158
+ "direction": "any"}), handler)
159
+ assert res == "REACHED"
160
+
161
+
162
+ @pytest.mark.asyncio
163
+ async def test_transfer_file_src_self_rewritten(workspace):
164
+ """src 是自己工作目录绝对路径 → 改写 src,放行。"""
165
+ mw = SandboxPathGuardMiddleware("osulcode.xiao")
166
+ self_ws = _self_ws(workspace)
167
+ src_abs = os.path.join(self_ws, "data.csv")
168
+ seen = {}
169
+
170
+ async def handler(req):
171
+ seen["args"] = req.tool_call["args"]
172
+ return "REACHED"
173
+
174
+ await mw.awrap_tool_call(
175
+ _req("transfer_file", {"src_path": src_abs, "dst_path": "./out.csv",
176
+ "direction": "any"}), handler)
177
+ assert seen["args"]["src_path"] == "/data.csv"
178
+ assert seen["args"]["dst_path"] == "./out.csv" # dst 未改
179
+
180
+
181
+ @pytest.mark.asyncio
182
+ async def test_transfer_file_dst_cross_user_denied(workspace):
183
+ """dst 指向别人的工作目录 → 整个调用拦截(防往别人目录写)。"""
184
+ mw = SandboxPathGuardMiddleware("osulcode.xiao")
185
+ other = os.path.join(workspace, "gary.liu", "out.csv")
186
+ called = {"n": 0}
187
+
188
+ async def handler(req):
189
+ called["n"] += 1
190
+ return "REACHED"
191
+
192
+ res = await mw.awrap_tool_call(
193
+ _req("transfer_file", {"src_path": "./a.py", "dst_path": other,
194
+ "direction": "any"}), handler)
195
+ assert called["n"] == 0
196
+ assert res.status == "error"
197
+
198
+
199
+ @pytest.mark.asyncio
200
+ async def test_transfer_file_src_cross_user_denied(workspace):
201
+ """src 是别人的工作目录 → 拦截(防借传输读他人文件)。"""
202
+ mw = SandboxPathGuardMiddleware("osulcode.xiao")
203
+ other = os.path.join(workspace, "gary.liu", "secret.csv")
204
+ called = {"n": 0}
205
+
206
+ async def handler(req):
207
+ called["n"] += 1
208
+ return "REACHED"
209
+
210
+ res = await mw.awrap_tool_call(
211
+ _req("transfer_file", {"src_path": other, "dst_path": "./out.csv",
212
+ "direction": "any"}), handler)
213
+ assert called["n"] == 0
214
+ assert res.status == "error"
215
+
216
+
217
+ @pytest.mark.asyncio
218
+ async def test_transfer_file_sandbox_prefix_self_rewritten(workspace):
219
+ """sandbox:<名称>: 前缀 + 自己工作目录路径 → 剥前缀判,改写时保留前缀。"""
220
+ mw = SandboxPathGuardMiddleware("osulcode.xiao")
221
+ self_ws = _self_ws(workspace)
222
+ src_abs = os.path.join(self_ws, "data.csv")
223
+ seen = {}
224
+
225
+ async def handler(req):
226
+ seen["args"] = req.tool_call["args"]
227
+ return "REACHED"
228
+
229
+ await mw.awrap_tool_call(
230
+ _req("transfer_file", {"src_path": f"sandbox:MacBook-Pro:{src_abs}",
231
+ "dst_path": "./out.csv", "direction": "any"}), handler)
232
+ assert seen["args"]["src_path"] == f"sandbox:MacBook-Pro:/data.csv"
233
+
234
+
235
+ # ============== awrap_tool_call: execute ==============
236
+
237
+ @pytest.mark.asyncio
238
+ async def test_execute_host_abs_path_denied(workspace):
239
+ """execute 命令串含宿主沙箱路径 → 拦(无法安全改写)。"""
240
+ mw = SandboxPathGuardMiddleware("osulcode.xiao")
241
+ self_ws = _self_ws(workspace)
242
+ cmd = f"cat {os.path.join(self_ws, 'skills', 'x.py')}"
243
+ called = {"n": 0}
244
+
245
+ async def handler(req):
246
+ called["n"] += 1
247
+ return "REACHED"
248
+
249
+ res = await mw.awrap_tool_call(_req("execute", {"command": cmd}), handler)
250
+ assert called["n"] == 0
251
+ assert res.status == "error"
252
+
253
+
254
+ @pytest.mark.asyncio
255
+ async def test_execute_relative_allowed(workspace):
256
+ """execute 用相对路径 / 虚拟路径 / $_SANDBOX_WORKSPACE → 放行。"""
257
+ mw = SandboxPathGuardMiddleware("osulcode.xiao")
258
+
259
+ async def handler(req):
260
+ return "REACHED"
261
+
262
+ for cmd in ["cat ./SKILL.md",
263
+ "python /skills/system/x/scripts/run.py",
264
+ "head $_SANDBOX_WORKSPACE/skills/x.py",
265
+ "ls /etc"]:
266
+ res = await mw.awrap_tool_call(_req("execute", {"command": cmd}), handler)
267
+ assert res == "REACHED", f"误拦了正常命令: {cmd}"
268
+
269
+
270
+ # ============== 无关工具 / 边界 ==============
271
+
272
+ @pytest.mark.asyncio
273
+ async def test_unrelated_tool_passthrough(workspace):
274
+ mw = SandboxPathGuardMiddleware("osulcode.xiao")
275
+
276
+ async def handler(req):
277
+ return "REACHED"
278
+
279
+ res = await mw.awrap_tool_call(
280
+ _req("web_search", {"queries": ["x"]}), handler)
281
+ assert res == "REACHED"
282
+
283
+
284
+ @pytest.mark.asyncio
285
+ async def test_no_user_id_still_blocks_cross_user(workspace):
286
+ """user_id 为空(self_ws 算不出)时:自己的也改不了,但跨用户的越权仍要拦。"""
287
+ mw = SandboxPathGuardMiddleware("")
288
+ other = os.path.join(workspace, "gary.liu", "skills", "x", "SKILL.md")
289
+ called = {"n": 0}
290
+
291
+ async def handler(req):
292
+ called["n"] += 1
293
+ return "REACHED"
294
+
295
+ res = await mw.awrap_tool_call(_req("read_file", {"file_path": other}), handler)
296
+ assert called["n"] == 0
297
+ assert res.status == "error"