sycommon-python-lib 0.2.5a40__tar.gz → 0.2.5a42__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 (296) hide show
  1. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/deep_agent.py +80 -29
  4. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/auth/wecom_ldap_service.py +54 -10
  5. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  6. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/README.md +0 -0
  7. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/setup.cfg +0 -0
  8. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/__init__.py +0 -0
  9. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/cli.py +0 -0
  10. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/core/__init__.py +0 -0
  11. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/core/console.py +0 -0
  12. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/core/models.py +0 -0
  13. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/core/project.py +0 -0
  14. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/core/utils.py +0 -0
  15. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/__init__.py +0 -0
  16. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/README.md.tpl +0 -0
  17. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/__init__.py +0 -0
  18. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  19. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  20. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  21. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  22. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  23. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  24. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  25. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/api/query.py.tpl +0 -0
  26. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  27. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  28. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/app.py.tpl +0 -0
  29. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/db/service.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/model/parse.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/.env.tpl +0 -0
  39. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/.gitignore.tpl +0 -0
  40. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/Dockerfile.tpl +0 -0
  41. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/README.md.tpl +0 -0
  42. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/__init__.py +0 -0
  43. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/app.py.tpl +0 -0
  44. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/app.yaml.tpl +0 -0
  45. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  46. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/client/__init__.py.tpl +0 -0
  47. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/model/__init__.py.tpl +0 -0
  48. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/model/file_info.py.tpl +0 -0
  49. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/base/requirements.txt.tpl +0 -0
  50. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/cli/README.md.tpl +0 -0
  51. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/cli/__init__.py +0 -0
  52. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/cli/app.py.tpl +0 -0
  53. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  54. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  55. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  56. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  57. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/web/README.md.tpl +0 -0
  58. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/web/__init__.py +0 -0
  59. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/web/api/__init__.py.tpl +0 -0
  60. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/web/api/echo.py.tpl +0 -0
  61. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  62. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  63. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/web/app.py.tpl +0 -0
  64. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/web/client/__init__.py.tpl +0 -0
  65. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/web/model/__init__.py.tpl +0 -0
  66. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/command/templates/web/tools/mq.py.tpl +0 -0
  68. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/nexus/__init__.py +0 -0
  69. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/__init__.py +0 -0
  70. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/__main__.py +0 -0
  71. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/agents/__init__.py +0 -0
  72. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/agents/factory.py +0 -0
  73. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/agents/prompts.py +0 -0
  74. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/__init__.py +0 -0
  75. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/browser.py +0 -0
  76. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/capabilities/__init__.py +0 -0
  77. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/capabilities/console.py +0 -0
  78. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/capabilities/dom.py +0 -0
  79. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/capabilities/network.py +0 -0
  80. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  81. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/capabilities/performance.py +0 -0
  82. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  83. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/client.py +0 -0
  84. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/protocol.py +0 -0
  85. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cdp/repl.py +0 -0
  86. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/cli.py +0 -0
  87. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/commands/__init__.py +0 -0
  88. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/commands/cdp_cmd.py +0 -0
  89. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/commands/chat_cmd.py +0 -0
  90. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/commands/create_cmd.py +0 -0
  91. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/commands/evaluate_cmd.py +0 -0
  92. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/commands/init_cmd.py +0 -0
  93. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/commands/memory_cmd.py +0 -0
  94. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/commands/resume_cmd.py +0 -0
  95. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/commands/rollback_cmd.py +0 -0
  96. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/commands/run_cmd.py +0 -0
  97. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/core/__init__.py +0 -0
  98. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/core/backend.py +0 -0
  99. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/core/config.py +0 -0
  100. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/core/display.py +0 -0
  101. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/core/git_integration.py +0 -0
  102. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/core/llm.py +0 -0
  103. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/core/state.py +0 -0
  104. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/evaluate/__init__.py +0 -0
  105. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/evaluate/api_evaluator.py +0 -0
  106. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/memory/__init__.py +0 -0
  107. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/memory/compressor.py +0 -0
  108. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/memory/full.py +0 -0
  109. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/memory/hot.py +0 -0
  110. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/memory/manager.py +0 -0
  111. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/memory/warm.py +0 -0
  112. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/mode/__init__.py +0 -0
  113. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/mode/create.py +0 -0
  114. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/mode/optimize.py +0 -0
  115. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/models/__init__.py +0 -0
  116. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/models/config_models.py +0 -0
  117. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/__init__.py +0 -0
  118. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/baseline_tests.py +0 -0
  119. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/checkpoint.py +0 -0
  120. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/convergence.py +0 -0
  121. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/diagnosis.py +0 -0
  122. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/engine.py +0 -0
  123. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/environment.py +0 -0
  124. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/experience.py +0 -0
  125. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/harness_prompts.py +0 -0
  126. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/history.py +0 -0
  127. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/optimization_logger.py +0 -0
  128. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/pre_validation.py +0 -0
  129. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/reward.py +0 -0
  130. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/strategy_bandit.py +0 -0
  131. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/strategy_generator.py +0 -0
  132. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/rl/strategy_prompts.py +0 -0
  133. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycli/skills/__init__.py +0 -0
  134. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/__init__.py +0 -0
  135. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/__init__.py +0 -0
  136. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/agent_manager.py +0 -0
  137. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/chat_events.py +0 -0
  138. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/mcp/__init__.py +0 -0
  139. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/mcp/models.py +0 -0
  140. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/mcp/tool_loader.py +0 -0
  141. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/multi_agent_team.py +0 -0
  142. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/sandbox/__init__.py +0 -0
  143. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  144. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  145. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
  146. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  147. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  148. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/sandbox/session.py +0 -0
  149. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/agent/summarization_utils.py +0 -0
  150. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/auth/__init__.py +0 -0
  151. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/auth/ldap_service.py +0 -0
  152. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/auth/oa_cache.py +0 -0
  153. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/auth/oa_crypto.py +0 -0
  154. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/auth/oa_service.py +0 -0
  155. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/Config.py +0 -0
  156. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/DatabaseConfig.py +0 -0
  157. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  158. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/EmbeddingConfig.py +0 -0
  159. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/LLMConfig.py +0 -0
  160. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/LangfuseConfig.py +0 -0
  161. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/MQConfig.py +0 -0
  162. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/PgConfig.py +0 -0
  163. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/RedisConfig.py +0 -0
  164. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/RerankerConfig.py +0 -0
  165. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/SentryConfig.py +0 -0
  166. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/XxlJobConfig.py +0 -0
  167. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/config/__init__.py +0 -0
  168. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/database/async_base_db_service.py +0 -0
  169. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/database/async_database_service.py +0 -0
  170. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/database/base_db_service.py +0 -0
  171. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/database/database_service.py +0 -0
  172. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/database/elasticsearch_service.py +0 -0
  173. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/database/pg_checkpoint_service.py +0 -0
  174. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/database/redis_service.py +0 -0
  175. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/database/token_usage_db_service.py +0 -0
  176. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/health/__init__.py +0 -0
  177. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/health/health_check.py +0 -0
  178. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/health/metrics.py +0 -0
  179. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/health/ping.py +0 -0
  180. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/heartbeat_process/__init__.py +0 -0
  181. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  182. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  183. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  184. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/__init__.py +0 -0
  185. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/embedding.py +0 -0
  186. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/get_llm.py +0 -0
  187. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/llm_logger.py +0 -0
  188. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/llm_tokens.py +0 -0
  189. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  190. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  191. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  192. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/struct_token.py +0 -0
  193. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/sy_langfuse.py +0 -0
  194. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  195. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
  196. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/token_usage_es_service.py +0 -0
  197. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  198. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/token_utils.py +0 -0
  199. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/llm/usage_token.py +0 -0
  200. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/logging/__init__.py +0 -0
  201. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/logging/async_sql_logger.py +0 -0
  202. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/logging/kafka_log.py +0 -0
  203. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/logging/logger_levels.py +0 -0
  204. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/logging/logger_wrapper.py +0 -0
  205. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/logging/process_logger.py +0 -0
  206. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/logging/sql_logger.py +0 -0
  207. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/mcp_server/__init__.py +0 -0
  208. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/mcp_server/server.py +0 -0
  209. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/__init__.py +0 -0
  210. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/context.py +0 -0
  211. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/cors.py +0 -0
  212. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/docs.py +0 -0
  213. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/exception.py +0 -0
  214. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/middleware.py +0 -0
  215. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/monitor_memory.py +0 -0
  216. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/mq.py +0 -0
  217. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/sandbox.py +0 -0
  218. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/timeout.py +0 -0
  219. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/token_tracking.py +0 -0
  220. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/tool_result_truncation.py +0 -0
  221. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/middleware/traceid.py +0 -0
  222. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/__init__.py +0 -0
  223. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/base_http.py +0 -0
  224. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/log.py +0 -0
  225. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/mcp_server_config.py +0 -0
  226. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/mqlistener_config.py +0 -0
  227. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/mqmsg_model.py +0 -0
  228. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/mqsend_config.py +0 -0
  229. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/sandbox.py +0 -0
  230. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/sso_user.py +0 -0
  231. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/token_usage.py +0 -0
  232. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/token_usage_mysql.py +0 -0
  233. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/models/xxljob_handler_config.py +0 -0
  234. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/notice/__init__.py +0 -0
  235. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  236. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/notice/wecom_message.py +0 -0
  237. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  238. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  239. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  240. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  241. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  242. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  243. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  244. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  245. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  246. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/sentry/__init__.py +0 -0
  247. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/sentry/sy_sentry.py +0 -0
  248. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/services.py +0 -0
  249. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/sse/__init__.py +0 -0
  250. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/sse/event.py +0 -0
  251. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/sse/sse.py +0 -0
  252. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/__init__.py +0 -0
  253. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/example.py +0 -0
  254. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/example2.py +0 -0
  255. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/feign.py +0 -0
  256. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/feign_client.py +0 -0
  257. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/nacos_client_base.py +0 -0
  258. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  259. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  260. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/nacos_service.py +0 -0
  261. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  262. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  263. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/synacos/param.py +0 -0
  264. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/deep_agent_server.py +0 -0
  265. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_consumer_loss_rootcause.py +0 -0
  266. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_consumer_recovery.py +0 -0
  267. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_deep_agent.py +0 -0
  268. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
  269. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_email.py +0 -0
  270. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_encoding_cache.py +0 -0
  271. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_fix_verification.py +0 -0
  272. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_mcp_server.py +0 -0
  273. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
  274. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_mq.py +0 -0
  275. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_oa_login.py +0 -0
  276. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_real_summarization.py +0 -0
  277. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_summarization_config.py +0 -0
  278. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_summarization_real.py +0 -0
  279. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tests/test_summary_leak_e2e.py +0 -0
  280. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tools/__init__.py +0 -0
  281. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tools/async_utils.py +0 -0
  282. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tools/docs.py +0 -0
  283. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tools/env.py +0 -0
  284. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tools/merge_headers.py +0 -0
  285. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tools/snowflake.py +0 -0
  286. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tools/syemail.py +0 -0
  287. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/tools/timing.py +0 -0
  288. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/xxljob/__init__.py +0 -0
  289. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon/xxljob/xxljob_service.py +0 -0
  290. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
  291. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  292. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  293. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  294. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  295. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/tests/test_asyncio_logging.py +0 -0
  296. {sycommon_python_lib-0.2.5a40 → sycommon_python_lib-0.2.5a42}/tests/test_sycli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.5a40
3
+ Version: 0.2.5a42
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.5a40"
3
+ version = "0.2.5a42"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -1221,31 +1221,74 @@ async def create_deep_agent(
1221
1221
 
1222
1222
 
1223
1223
  def _parse_skill_version(content: str) -> str:
1224
- """从 SKILL.md 内容中解析 version 字段,无 version 返回空字符串"""
1225
- match = re.match(r"^---\s*\n(.*?)\n---\s*\n", content, re.DOTALL)
1226
- if not match:
1227
- return ""
1228
- try:
1229
- data = yaml.safe_load(match.group(1))
1230
- if isinstance(data, dict):
1231
- return str(data.get("version", ""))
1232
- except Exception:
1233
- pass
1224
+ """从 SKILL.md 内容中解析 version 字段,无 version 返回空字符串
1225
+
1226
+ 使用逐行解析而非 yaml.safe_load,避免 description 中含冒号导致 YAML 解析失败。
1227
+ """
1228
+ in_frontmatter = False
1229
+ for line in content.split("\n"):
1230
+ stripped = line.strip()
1231
+ if stripped == "---":
1232
+ if in_frontmatter:
1233
+ break # 结束 frontmatter
1234
+ in_frontmatter = True
1235
+ continue
1236
+ if in_frontmatter and stripped.startswith("version:"):
1237
+ return stripped.split(":", 1)[1].strip()
1234
1238
  return ""
1235
1239
 
1236
1240
 
1241
+ async def _sync_skill_to_minio(
1242
+ minio_service,
1243
+ local_skill_dir: str,
1244
+ skill_name: str,
1245
+ ) -> int:
1246
+ """将单个技能目录上传到 MinIO(skills/{skill_name}/...)
1247
+
1248
+ Returns:
1249
+ 成功上传的文件数量
1250
+ """
1251
+ count = 0
1252
+ for root, _dirs, files in os.walk(local_skill_dir):
1253
+ for fname in files:
1254
+ fpath = os.path.join(root, fname)
1255
+ rel = os.path.relpath(fpath, local_skill_dir)
1256
+ # 统一使用 / 作为分隔符
1257
+ object_key = f"skills/{skill_name}/{rel.replace(os.sep, '/')}"
1258
+ try:
1259
+ content = await asyncio.to_thread(
1260
+ lambda p: open(p, "rb").read(), fpath)
1261
+ await minio_service.aupload_bytes(object_key, content)
1262
+ count += 1
1263
+ except Exception as e:
1264
+ SYLogger.warning(
1265
+ f"[MinIO] 技能文件上传失败: {object_key}, {e}")
1266
+ SYLogger.info(f"[MinIO] 技能 {skill_name} 同步完成: {count} 个文件")
1267
+ return count
1268
+
1269
+
1237
1270
  async def _sync_skills_to_sandbox(
1238
1271
  skills_dir: str,
1239
1272
  backend: HTTPSandboxBackend,
1240
1273
  ) -> None:
1241
- """同步 skills SKILL.md 到沙箱(按版本检查,版本不一致则覆盖)
1274
+ """同步技能目录到沙箱和 MinIO(按版本检查,版本不一致则全量覆盖)
1242
1275
 
1243
- 只同步 SKILL.md 文件,不同步 scripts/ 等大目录。
1244
- scripts/ 在 agent 实际调用时由 HTTPSandboxBackend._lazy_sync_skill_from_path 按需同步。
1276
+ 遍历本地 skills_dir 下所有技能子目录,比较本地与沙箱的 SKILL.md version:
1277
+ - 版本一致:跳过
1278
+ - 版本不一致或沙箱无版本:删除旧目录,全量上传到沙箱和 MinIO
1279
+ 同步完成后将技能名加入 backend._synced_skills,跳过后续懒同步。
1245
1280
  """
1246
1281
  if not os.path.isdir(skills_dir):
1247
1282
  return
1248
1283
 
1284
+ try:
1285
+ from sycommon.agent.sandbox.minio_sync import MinioSyncService
1286
+ minio_available = MinioSyncService.is_available()
1287
+ minio_service = MinioSyncService() if minio_available else None
1288
+ except Exception:
1289
+ minio_available = False
1290
+ minio_service = None
1291
+
1249
1292
  try:
1250
1293
  # 获取沙箱 /skills 下已有的目录列表
1251
1294
  existing_dirs = set()
@@ -1255,8 +1298,9 @@ async def _sync_skills_to_sandbox(
1255
1298
  if child.is_dir:
1256
1299
  existing_dirs.add(child.name)
1257
1300
 
1258
- # 遍历本地 skills,按版本决定是否同步
1259
- for skill_name in os.listdir(skills_dir):
1301
+ skill_count = 0
1302
+ skip_count = 0
1303
+ for skill_name in sorted(os.listdir(skills_dir)):
1260
1304
  src = os.path.join(skills_dir, skill_name)
1261
1305
  if not os.path.isdir(src):
1262
1306
  continue
@@ -1271,11 +1315,12 @@ async def _sync_skills_to_sandbox(
1271
1315
  except Exception:
1272
1316
  pass
1273
1317
 
1318
+ # 比较版本:一致则跳过
1274
1319
  if skill_name in existing_dirs:
1275
- # 读取沙箱中的版本
1276
1320
  remote_version = ""
1277
1321
  try:
1278
- remote_content = await backend.aread(f"/skills/{skill_name}/SKILL.md")
1322
+ remote_content = await backend.aread(
1323
+ f"/skills/{skill_name}/SKILL.md")
1279
1324
  if remote_content:
1280
1325
  remote_version = _parse_skill_version(remote_content)
1281
1326
  except Exception:
@@ -1284,27 +1329,33 @@ async def _sync_skills_to_sandbox(
1284
1329
  if remote_version and remote_version == local_version:
1285
1330
  SYLogger.debug(
1286
1331
  f"[DeepAgent] 技能版本一致,跳过: {skill_name} v{local_version}")
1332
+ backend._synced_skills.add(skill_name)
1333
+ skip_count += 1
1287
1334
  continue
1288
1335
 
1289
- # 版本不一致或沙箱无版本,删除后重新上传
1336
+ # 版本不一致或沙箱无版本,删除旧目录后全量覆盖
1290
1337
  try:
1291
1338
  await backend.aexecute(f"rm -rf /skills/{skill_name}")
1292
1339
  SYLogger.info(
1293
- f"[DeepAgent] 技能版本不一致,覆盖: {skill_name} ({remote_version or '无版本'} → {local_version})")
1340
+ f"[DeepAgent] 技能版本不一致,覆盖: {skill_name} "
1341
+ f"({remote_version or '无版本'} → {local_version})")
1294
1342
  except Exception as e:
1295
1343
  SYLogger.warning(
1296
1344
  f"[DeepAgent] 删除旧版技能失败: {skill_name}, {e}")
1297
- continue
1298
1345
 
1299
- # 只同步 SKILL.md(不再同步整个目录)
1300
- if os.path.isfile(local_skill_md):
1301
- with open(local_skill_md, "rb") as f:
1302
- content = f.read()
1303
- await backend.aupload_files([
1304
- (f"/skills/{skill_name}/SKILL.md", content)
1305
- ])
1306
- SYLogger.info(
1307
- f"[DeepAgent] 同步技能元数据到沙箱: {skill_name} v{local_version} (仅 SKILL.md)")
1346
+ # 全量上传整个技能目录到沙箱
1347
+ await backend.async_sync_dirs([(src, f"/skills/{skill_name}")])
1348
+ backend._synced_skills.add(skill_name)
1349
+ skill_count += 1
1350
+ SYLogger.info(
1351
+ f"[DeepAgent] 全量同步技能到沙箱: {skill_name} v{local_version}")
1352
+
1353
+ # 同步到 MinIO
1354
+ if minio_service:
1355
+ await _sync_skill_to_minio(minio_service, src, skill_name)
1356
+
1357
+ SYLogger.info(
1358
+ f"[DeepAgent] 技能同步完成: 同步 {skill_count} 个, 跳过 {skip_count} 个")
1308
1359
  except Exception as e:
1309
1360
  SYLogger.warning(f"[DeepAgent] 技能同步失败: {e}")
1310
1361
 
@@ -267,11 +267,45 @@ class WeComLDAPService(metaclass=SingletonMeta):
267
267
  async with session.post(url, json=json_body or {}) as resp:
268
268
  return await resp.json()
269
269
 
270
+ async def _get_bot_access_token(self) -> str:
271
+ """获取用于 open_userid 解码的 access_token
272
+
273
+ 本地开发(IS_DEV=true)时,使用 WeComDecodeUserID 配置的凭据,
274
+ 线上直接使用 WeCom 配置的凭据。
275
+ """
276
+ import os
277
+ from sycommon.config.Config import Config
278
+
279
+ is_dev = os.environ.get("IS_DEV") == "true"
280
+ config = Config().config.get("llm", {})
281
+
282
+ if is_dev:
283
+ wecom_config = config.get("WeComDecodeUserID", {}) or config.get("WeCom", {})
284
+ else:
285
+ wecom_config = config.get("WeCom", {})
286
+
287
+ corpid = wecom_config.get("corpid", "")
288
+ corpsecret = wecom_config.get("corpsecret", "")
289
+ if not corpid or not corpsecret:
290
+ raise ValueError("解码凭据配置不完整,需要配置 llm.WeComDecodeUserID 或 llm.WeCom")
291
+
292
+ url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
293
+ params = {"corpid": corpid, "corpsecret": corpsecret}
294
+ async with aiohttp.ClientSession() as session:
295
+ async with session.get(url, params=params) as resp:
296
+ data = await resp.json()
297
+
298
+ if data.get("errcode") != 0:
299
+ raise RuntimeError(f"获取解码 access_token 失败: {data}")
300
+
301
+ logging.info("[WeComLDAP] 解码 access_token 已刷新")
302
+ return data["access_token"]
303
+
270
304
  async def _decode_open_userid(self, open_userid: str) -> Optional[str]:
271
305
  """将企微密文 open_userid 转换为明文 userid
272
306
 
273
- userid 长度超过 20 位时,大概率是智能机器人的密文 open_userid,
274
- 需要通过 batch/openuserid_to_userid 接口解码。
307
+ 使用机器人应用的 access_token 调用 batch/openuserid_to_userid 接口解码。
308
+ 机器人回调推的 userid 是加密的 open_userid,只有机器人应用的 token 才能转换。
275
309
 
276
310
  Args:
277
311
  open_userid: 密文格式的企微用户ID
@@ -280,10 +314,14 @@ class WeComLDAPService(metaclass=SingletonMeta):
280
314
  解码后的明文 userid,失败返回 None
281
315
  """
282
316
  try:
283
- data = await self._wecom_post(
284
- "/cgi-bin/batch/openuserid_to_userid",
285
- {"open_userid_list": [open_userid]},
286
- )
317
+ token = await self._get_bot_access_token()
318
+ url = "https://qyapi.weixin.qq.com/cgi-bin/batch/openuserid_to_userid"
319
+ async with aiohttp.ClientSession() as session:
320
+ async with session.post(
321
+ f"{url}?access_token={token}",
322
+ json={"open_userid_list": [open_userid]},
323
+ ) as resp:
324
+ data = await resp.json()
287
325
  if data.get("errcode") != 0:
288
326
  SYLogger.warning(
289
327
  f"[WeComLDAP] open_userid 解码失败: {data}"
@@ -334,10 +372,16 @@ class WeComLDAPService(metaclass=SingletonMeta):
334
372
  return decoded if decoded else userid
335
373
 
336
374
  async def _get_wecom_user(self, userid: str) -> Optional[dict]:
337
- """获取单个企微用户详情"""
338
- data = await self._wecom_get(
339
- "/cgi-bin/user/get", {"userid": userid}
340
- )
375
+ """获取单个企微用户详情
376
+
377
+ IS_DEV=true 时使用 WeComDecodeUserID 的 token,
378
+ 线上使用 WeCom 的 token。
379
+ """
380
+ token = await self._get_bot_access_token()
381
+ url = f"https://qyapi.weixin.qq.com/cgi-bin/user/get"
382
+ async with aiohttp.ClientSession() as session:
383
+ async with session.get(url, params={"access_token": token, "userid": userid}) as resp:
384
+ data = await resp.json()
341
385
  if data.get("errcode") != 0:
342
386
  SYLogger.warning(f"[WeComLDAP] 获取企微用户 {userid} 失败: {data}")
343
387
  return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.5a40
3
+ Version: 0.2.5a42
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown