sycommon-python-lib 0.2.5a22__tar.gz → 0.2.5a24__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 (291) hide show
  1. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/mcp/models.py +4 -0
  4. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/mcp/tool_loader.py +7 -0
  5. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/summarization_utils.py +65 -0
  6. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/auth/wecom_ldap_service.py +90 -78
  7. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/llm_with_token_tracking.py +53 -4
  8. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/usage_token.py +43 -3
  9. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  10. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/README.md +0 -0
  11. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/setup.cfg +0 -0
  12. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/__init__.py +0 -0
  13. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/cli.py +0 -0
  14. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/core/__init__.py +0 -0
  15. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/core/console.py +0 -0
  16. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/core/models.py +0 -0
  17. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/core/project.py +0 -0
  18. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/core/utils.py +0 -0
  19. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/__init__.py +0 -0
  20. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/README.md.tpl +0 -0
  21. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/__init__.py +0 -0
  22. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  23. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  24. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  25. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  26. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  27. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  28. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  29. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/api/query.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/app.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/db/service.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/model/parse.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  41. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  42. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/.env.tpl +0 -0
  43. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/.gitignore.tpl +0 -0
  44. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/Dockerfile.tpl +0 -0
  45. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/README.md.tpl +0 -0
  46. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/__init__.py +0 -0
  47. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/app.py.tpl +0 -0
  48. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/app.yaml.tpl +0 -0
  49. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  50. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/client/__init__.py.tpl +0 -0
  51. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/model/__init__.py.tpl +0 -0
  52. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/model/file_info.py.tpl +0 -0
  53. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/base/requirements.txt.tpl +0 -0
  54. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/cli/README.md.tpl +0 -0
  55. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/cli/__init__.py +0 -0
  56. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/cli/app.py.tpl +0 -0
  57. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  58. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  59. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  60. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  61. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/web/README.md.tpl +0 -0
  62. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/web/__init__.py +0 -0
  63. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/web/api/__init__.py.tpl +0 -0
  64. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/web/api/echo.py.tpl +0 -0
  65. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  66. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/web/app.py.tpl +0 -0
  68. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/web/client/__init__.py.tpl +0 -0
  69. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/web/model/__init__.py.tpl +0 -0
  70. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  71. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/command/templates/web/tools/mq.py.tpl +0 -0
  72. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/nexus/__init__.py +0 -0
  73. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/__init__.py +0 -0
  74. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/__main__.py +0 -0
  75. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/agents/__init__.py +0 -0
  76. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/agents/factory.py +0 -0
  77. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/agents/prompts.py +0 -0
  78. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/__init__.py +0 -0
  79. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/browser.py +0 -0
  80. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/capabilities/__init__.py +0 -0
  81. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/capabilities/console.py +0 -0
  82. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/capabilities/dom.py +0 -0
  83. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/capabilities/network.py +0 -0
  84. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  85. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/capabilities/performance.py +0 -0
  86. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  87. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/client.py +0 -0
  88. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/protocol.py +0 -0
  89. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cdp/repl.py +0 -0
  90. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/cli.py +0 -0
  91. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/commands/__init__.py +0 -0
  92. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/commands/cdp_cmd.py +0 -0
  93. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/commands/chat_cmd.py +0 -0
  94. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/commands/create_cmd.py +0 -0
  95. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/commands/evaluate_cmd.py +0 -0
  96. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/commands/init_cmd.py +0 -0
  97. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/commands/memory_cmd.py +0 -0
  98. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/commands/resume_cmd.py +0 -0
  99. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/commands/rollback_cmd.py +0 -0
  100. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/commands/run_cmd.py +0 -0
  101. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/core/__init__.py +0 -0
  102. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/core/backend.py +0 -0
  103. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/core/config.py +0 -0
  104. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/core/display.py +0 -0
  105. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/core/git_integration.py +0 -0
  106. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/core/llm.py +0 -0
  107. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/core/state.py +0 -0
  108. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/evaluate/__init__.py +0 -0
  109. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/evaluate/api_evaluator.py +0 -0
  110. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/memory/__init__.py +0 -0
  111. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/memory/compressor.py +0 -0
  112. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/memory/full.py +0 -0
  113. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/memory/hot.py +0 -0
  114. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/memory/manager.py +0 -0
  115. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/memory/warm.py +0 -0
  116. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/mode/__init__.py +0 -0
  117. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/mode/create.py +0 -0
  118. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/mode/optimize.py +0 -0
  119. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/models/__init__.py +0 -0
  120. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/models/config_models.py +0 -0
  121. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/__init__.py +0 -0
  122. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/baseline_tests.py +0 -0
  123. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/checkpoint.py +0 -0
  124. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/convergence.py +0 -0
  125. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/diagnosis.py +0 -0
  126. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/engine.py +0 -0
  127. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/environment.py +0 -0
  128. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/experience.py +0 -0
  129. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/harness_prompts.py +0 -0
  130. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/history.py +0 -0
  131. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/optimization_logger.py +0 -0
  132. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/pre_validation.py +0 -0
  133. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/reward.py +0 -0
  134. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/strategy_bandit.py +0 -0
  135. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/strategy_generator.py +0 -0
  136. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/rl/strategy_prompts.py +0 -0
  137. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycli/skills/__init__.py +0 -0
  138. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/__init__.py +0 -0
  139. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/__init__.py +0 -0
  140. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/agent_manager.py +0 -0
  141. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/chat_events.py +0 -0
  142. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/deep_agent.py +0 -0
  143. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/mcp/__init__.py +0 -0
  144. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/multi_agent_team.py +0 -0
  145. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/sandbox/__init__.py +0 -0
  146. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  147. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  148. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
  149. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  150. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  151. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/agent/sandbox/session.py +0 -0
  152. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/auth/__init__.py +0 -0
  153. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/auth/ldap_service.py +0 -0
  154. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/auth/oa_cache.py +0 -0
  155. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/auth/oa_crypto.py +0 -0
  156. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/auth/oa_service.py +0 -0
  157. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/Config.py +0 -0
  158. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/DatabaseConfig.py +0 -0
  159. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  160. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/EmbeddingConfig.py +0 -0
  161. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/LLMConfig.py +0 -0
  162. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/LangfuseConfig.py +0 -0
  163. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/MQConfig.py +0 -0
  164. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/PgConfig.py +0 -0
  165. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/RedisConfig.py +0 -0
  166. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/RerankerConfig.py +0 -0
  167. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/SentryConfig.py +0 -0
  168. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/XxlJobConfig.py +0 -0
  169. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/config/__init__.py +0 -0
  170. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/database/async_base_db_service.py +0 -0
  171. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/database/async_database_service.py +0 -0
  172. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/database/base_db_service.py +0 -0
  173. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/database/database_service.py +0 -0
  174. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/database/elasticsearch_service.py +0 -0
  175. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/database/pg_checkpoint_service.py +0 -0
  176. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/database/redis_service.py +0 -0
  177. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/database/token_usage_db_service.py +0 -0
  178. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/health/__init__.py +0 -0
  179. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/health/health_check.py +0 -0
  180. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/health/metrics.py +0 -0
  181. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/health/ping.py +0 -0
  182. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/heartbeat_process/__init__.py +0 -0
  183. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  184. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  185. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  186. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/__init__.py +0 -0
  187. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/embedding.py +0 -0
  188. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/get_llm.py +0 -0
  189. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/llm_logger.py +0 -0
  190. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/llm_tokens.py +0 -0
  191. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  192. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  193. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/struct_token.py +0 -0
  194. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/sy_langfuse.py +0 -0
  195. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  196. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
  197. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/token_usage_es_service.py +0 -0
  198. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  199. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/logging/__init__.py +0 -0
  200. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/logging/async_sql_logger.py +0 -0
  201. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/logging/kafka_log.py +0 -0
  202. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/logging/logger_levels.py +0 -0
  203. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/logging/logger_wrapper.py +0 -0
  204. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/logging/process_logger.py +0 -0
  205. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/logging/sql_logger.py +0 -0
  206. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/mcp_server/__init__.py +0 -0
  207. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/mcp_server/server.py +0 -0
  208. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/__init__.py +0 -0
  209. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/context.py +0 -0
  210. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/cors.py +0 -0
  211. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/docs.py +0 -0
  212. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/exception.py +0 -0
  213. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/middleware.py +0 -0
  214. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/monitor_memory.py +0 -0
  215. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/mq.py +0 -0
  216. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/sandbox.py +0 -0
  217. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/timeout.py +0 -0
  218. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/token_tracking.py +0 -0
  219. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/tool_result_truncation.py +0 -0
  220. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/middleware/traceid.py +0 -0
  221. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/__init__.py +0 -0
  222. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/base_http.py +0 -0
  223. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/log.py +0 -0
  224. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/mcp_server_config.py +0 -0
  225. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/mqlistener_config.py +0 -0
  226. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/mqmsg_model.py +0 -0
  227. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/mqsend_config.py +0 -0
  228. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/sandbox.py +0 -0
  229. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/sso_user.py +0 -0
  230. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/token_usage.py +0 -0
  231. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/token_usage_mysql.py +0 -0
  232. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/models/xxljob_handler_config.py +0 -0
  233. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/notice/__init__.py +0 -0
  234. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  235. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/notice/wecom_message.py +0 -0
  236. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  237. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  238. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  239. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  240. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  241. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  242. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  243. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  244. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  245. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/sentry/__init__.py +0 -0
  246. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/sentry/sy_sentry.py +0 -0
  247. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/services.py +0 -0
  248. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/sse/__init__.py +0 -0
  249. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/sse/event.py +0 -0
  250. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/sse/sse.py +0 -0
  251. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/__init__.py +0 -0
  252. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/example.py +0 -0
  253. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/example2.py +0 -0
  254. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/feign.py +0 -0
  255. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/feign_client.py +0 -0
  256. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/nacos_client_base.py +0 -0
  257. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  258. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  259. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/nacos_service.py +0 -0
  260. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  261. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  262. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/synacos/param.py +0 -0
  263. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/deep_agent_server.py +0 -0
  264. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_consumer_recovery.py +0 -0
  265. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_deep_agent.py +0 -0
  266. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
  267. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_email.py +0 -0
  268. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_encoding_cache.py +0 -0
  269. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_mcp_server.py +0 -0
  270. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
  271. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_mq.py +0 -0
  272. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_oa_login.py +0 -0
  273. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_real_summarization.py +0 -0
  274. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_summarization_config.py +0 -0
  275. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tests/test_summarization_real.py +0 -0
  276. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tools/__init__.py +0 -0
  277. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tools/async_utils.py +0 -0
  278. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tools/docs.py +0 -0
  279. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tools/env.py +0 -0
  280. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tools/merge_headers.py +0 -0
  281. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tools/snowflake.py +0 -0
  282. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tools/syemail.py +0 -0
  283. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/tools/timing.py +0 -0
  284. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/xxljob/__init__.py +0 -0
  285. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon/xxljob/xxljob_service.py +0 -0
  286. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
  287. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  288. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  289. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  290. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  291. {sycommon_python_lib-0.2.5a22 → sycommon_python_lib-0.2.5a24}/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.5a22
3
+ Version: 0.2.5a24
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.5a22"
3
+ version = "0.2.5a24"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -8,6 +8,7 @@ class MCPToolStatus(BaseModel):
8
8
  """MCP 工具可用状态"""
9
9
  tool_name: str
10
10
  description: Optional[str] = None
11
+ display_name: Optional[str] = None
11
12
  available: bool = True
12
13
  last_check_at: Optional[str] = None
13
14
  last_error: Optional[str] = None
@@ -17,6 +18,7 @@ class MCPServerConfig(BaseModel):
17
18
  id: str
18
19
  user_id: Optional[str] = None
19
20
  name: str
21
+ alias: Optional[str] = None
20
22
  server_url: str
21
23
  description: Optional[str] = None
22
24
  headers: Optional[dict] = None
@@ -31,6 +33,7 @@ class MCPServerConfig(BaseModel):
31
33
 
32
34
  class MCPServerCreateRequest(BaseModel):
33
35
  name: str
36
+ alias: Optional[str] = None
34
37
  server_url: str
35
38
  description: Optional[str] = None
36
39
  headers: Optional[dict] = None
@@ -39,6 +42,7 @@ class MCPServerCreateRequest(BaseModel):
39
42
 
40
43
  class MCPServerUpdateRequest(BaseModel):
41
44
  name: Optional[str] = None
45
+ alias: Optional[str] = None
42
46
  server_url: Optional[str] = None
43
47
  description: Optional[str] = None
44
48
  headers: Optional[dict] = None
@@ -122,6 +122,7 @@ def _make_user_id_interceptor(user_id: str):
122
122
  async def load_mcp_tools(
123
123
  configs: List[MCPServerConfig],
124
124
  user_id: str = None,
125
+ tool_display_names: Optional[dict] = None,
125
126
  on_tool_success: Optional[Callable[[str, str], Awaitable[None]]] = None,
126
127
  on_tool_error: Optional[Callable[[str, str, str], Awaitable[None]]] = None,
127
128
  on_batch_available: Optional[Callable[[
@@ -135,6 +136,7 @@ async def load_mcp_tools(
135
136
  Args:
136
137
  configs: MCP 服务器配置列表(仅 enabled 的会被处理)
137
138
  user_id: 当前用户 ID,通过 interceptor 注入到每次 MCP 工具调用的 header 中
139
+ tool_display_names: 可选的工具中文显示名映射 {tool_full_name: display_name}
138
140
  on_tool_success: 单个工具调用成功回调
139
141
  on_tool_error: 单个工具调用失败回调
140
142
  on_batch_available: 服务器连接成功后批量标记工具可用回调 (config_id, tool_names)
@@ -186,6 +188,11 @@ async def load_mcp_tools(
186
188
  lc_tool.name = f"mcp__{key}__{original_name}"
187
189
  if lc_tool.description and not lc_tool.description.startswith("[MCP"):
188
190
  lc_tool.description = f"[MCP:{config.name}] {lc_tool.description}"
191
+ # 注入中文别名到 description,让 LLM 能识别用户说的中文名
192
+ if tool_display_names:
193
+ dn = tool_display_names.get(lc_tool.name)
194
+ if dn:
195
+ lc_tool.description = f"[别名: {dn}] {lc_tool.description}"
189
196
  lc_tool = wrap_tool_with_error_handler(
190
197
  lc_tool, config.id, config.name, original_name,
191
198
  on_tool_success=on_tool_success,
@@ -25,6 +25,50 @@ if TYPE_CHECKING:
25
25
 
26
26
  logger = logging.getLogger(__name__)
27
27
 
28
+ # 中文摘要提示词,替代 langchain DEFAULT_SUMMARY_PROMPT
29
+ # 使用自然段落格式,避免 SESSION INTENT / ARTIFACTS / NEXT STEPS 等英文标题泄漏到用户输出
30
+ CUSTOM_SUMMARY_PROMPT = """<role>
31
+ 上下文提取助手
32
+ </role>
33
+
34
+ <primary_objective>
35
+ 你的唯一目标是从下面的对话历史中提取最高质量、最相关的上下文信息。
36
+ </primary_objective>
37
+
38
+ <objective_information>
39
+ 你即将达到可接受的输入 token 总数,因此必须从对话历史中提取最高质量/最相关的信息。
40
+ 提取的上下文将替换下面的对话历史。因此,确保你提取的上下文仅包含对实现整体目标最重要的信息。
41
+ </objective_information>
42
+
43
+ <instructions>
44
+ 下面的对话历史将被你在此步骤中提取的上下文替换。
45
+ 你需要确保不会重复任何已完成的操作,因此你从对话历史中提取的上下文应集中于对整体目标最重要的信息。
46
+
47
+ 请用以下结构提取上下文,每个部分用中文自然段落描述,不要使用英文标题:
48
+
49
+ 【用户意图】
50
+ 简要描述用户的主要目标或请求,确保足够完整以理解整个会话的目的。
51
+
52
+ 【关键上下文】
53
+ 提取并记录对话历史中所有最重要的上下文信息,包括重要选择、结论或策略,以及关键决策背后的推理。记录被拒绝的选项及其原因。
54
+
55
+ 【相关文件】
56
+ 列出在本次对话中创建、修改或访问的文件、资源或工件。对于文件修改,列出具体文件路径并简要描述每个文件的变更。
57
+
58
+ 【待办事项】
59
+ 列出为达成用户意图仍需完成的具体任务,以及接下来应该做什么。
60
+ </instructions>
61
+
62
+ 用户将向你发送完整的消息历史,你需要从中提取上下文以创建替换内容。请仔细阅读所有内容,并深入思考哪些信息对整体目标最重要且应该被保存:
63
+
64
+ 请仔细阅读整个对话历史,提取最重要和最相关的上下文以替换对话历史,从而释放空间。
65
+ 仅回复提取的上下文,不要包含任何额外信息,也不要在提取的上下文前后添加任何文本。
66
+
67
+ <messages>
68
+ 待摘要的消息:
69
+ {messages}
70
+ </messages>""" # noqa: E501
71
+
28
72
 
29
73
  def _extract_last_usage_total_tokens(messages) -> int:
30
74
  """从消息历史中提取最后一条 AIMessage 的 usage_metadata.total_tokens。
@@ -135,6 +179,26 @@ async def _patched_awrap_model_call(self, request, handler):
135
179
 
136
180
  _OrigDeepAgentsSumm.awrap_model_call = _patched_awrap_model_call
137
181
 
182
+ # monkey-patch:将摘要注入消息改为中文包装,避免英文泄漏
183
+ _orig_build_new_messages = _OrigDeepAgentsSumm._build_new_messages_with_path
184
+
185
+
186
+ def _patched_build_new_messages(self, summary, file_path):
187
+ if file_path is not None:
188
+ content = (
189
+ "你正在一个已经被压缩的对话中继续回复用户。\n\n"
190
+ f"完整的对话历史已保存到 {file_path},如需查阅细节可以读取该文件。\n\n"
191
+ "以下是压缩后的对话摘要:\n\n"
192
+ f"<summary>\n{summary}\n</summary>"
193
+ )
194
+ else:
195
+ content = f"以下是到目前为止的对话摘要:\n\n{summary}"
196
+ from langchain_core.messages import HumanMessage
197
+ return [HumanMessage(content=content, additional_kwargs={"lc_source": "summarization"})]
198
+
199
+
200
+ _OrigDeepAgentsSumm._build_new_messages_with_path = _patched_build_new_messages
201
+
138
202
 
139
203
  def build_summarization_middleware(
140
204
  model: BaseChatModel,
@@ -180,6 +244,7 @@ def build_summarization_middleware(
180
244
  keep=("tokens", keep_tokens),
181
245
  token_counter=functools.partial(
182
246
  count_tokens_approximately, chars_per_token=2.0),
247
+ summary_prompt=CUSTOM_SUMMARY_PROMPT,
183
248
  trim_tokens_to_summarize=None,
184
249
  truncate_args_settings={
185
250
  "trigger": ("tokens", trigger_tokens),
@@ -293,8 +293,8 @@ class WeComLDAPService(metaclass=SingletonMeta):
293
293
 
294
294
  # ─── LDAP 查询 ───
295
295
 
296
- def _load_ldap_index_sync(self) -> _LDAPIndex:
297
- """同步加载 LDAP 用户索引"""
296
+ def _load_ldap_index_sync(self, max_retries: int = 10, retry_interval: float = 1.0) -> _LDAPIndex:
297
+ """同步加载 LDAP 用户索引(所有 URL 均失败则重试)"""
298
298
  import ldap3
299
299
 
300
300
  self._ensure_configs()
@@ -303,86 +303,98 @@ class WeComLDAPService(metaclass=SingletonMeta):
303
303
  bind_user = f"{config.username}@{config.default_dc}"
304
304
  raw_users = []
305
305
 
306
- for url in config.urls:
307
- try:
308
- server = ldap3.Server(
309
- url.rstrip("/"),
310
- get_info=ldap3.ALL,
311
- connect_timeout=5,
312
- )
313
- conn = ldap3.Connection(
314
- server,
315
- user=bind_user,
316
- password=config.password,
317
- auto_bind=True,
318
- receive_timeout=30,
319
- )
320
-
321
- # 搜索盛业(大陆)和盛业(香港)两个 OU
322
- for ou_base in [
323
- f"OU=盛业(大陆),{config.base}",
324
- f"OU=盛业(香港),{config.base}",
325
- ]:
326
- conn.search(
327
- search_base=ou_base,
328
- search_filter="(objectClass=user)",
329
- search_scope=ldap3.SUBTREE,
330
- attributes=[
331
- "cn",
332
- "sAMAccountName",
333
- "sn",
334
- "mail",
335
- "department",
336
- "title",
337
- "telephoneNumber",
338
- "distinguishedName",
339
- ],
340
- size_limit=0,
306
+ for attempt in range(1, max_retries + 1):
307
+ raw_users = []
308
+ last_error = None
309
+ for url in config.urls:
310
+ try:
311
+ server = ldap3.Server(
312
+ url.rstrip("/"),
313
+ get_info=ldap3.ALL,
314
+ connect_timeout=5,
315
+ )
316
+ conn = ldap3.Connection(
317
+ server,
318
+ user=bind_user,
319
+ password=config.password,
320
+ auto_bind=True,
321
+ receive_timeout=30,
341
322
  )
342
323
 
343
- for entry in conn.entries:
344
- cn = str(entry.cn).strip() if entry.cn else ""
345
- sam = (
346
- str(entry.sAMAccountName).strip()
347
- if entry.sAMAccountName
348
- else ""
349
- )
350
- if not cn or not sam or sam.startswith("$"):
351
- continue
352
-
353
- raw_users.append(
354
- {
355
- "cn": cn,
356
- "sAMAccountName": sam,
357
- "sn": str(entry.sn).strip() if entry.sn else "",
358
- "mail": str(entry.mail).strip()
359
- if entry.mail
360
- else "",
361
- "department": str(entry.department).strip()
362
- if entry.department
363
- else "",
364
- "title": str(entry.title).strip()
365
- if entry.title
366
- else "",
367
- "telephoneNumber": str(
368
- entry.telephoneNumber
369
- ).strip()
370
- if entry.telephoneNumber
371
- else "",
372
- "distinguishedName": str(
373
- entry.distinguishedName
374
- ).strip()
375
- if entry.distinguishedName
376
- else "",
377
- }
324
+ for ou_base in [
325
+ f"OU=盛业(大陆),{config.base}",
326
+ f"OU=盛业(香港),{config.base}",
327
+ ]:
328
+ conn.search(
329
+ search_base=ou_base,
330
+ search_filter="(objectClass=user)",
331
+ search_scope=ldap3.SUBTREE,
332
+ attributes=[
333
+ "cn",
334
+ "sAMAccountName",
335
+ "sn",
336
+ "mail",
337
+ "department",
338
+ "title",
339
+ "telephoneNumber",
340
+ "distinguishedName",
341
+ ],
342
+ size_limit=0,
378
343
  )
379
344
 
380
- conn.unbind()
381
- break # 第一个可用的 LDAP 服务器成功即停止
382
-
383
- except Exception as e:
384
- SYLogger.warning(f"[WeComLDAP] LDAP 连接 {url} 失败: {e}")
385
- continue
345
+ for entry in conn.entries:
346
+ cn = str(entry.cn).strip() if entry.cn else ""
347
+ sam = (
348
+ str(entry.sAMAccountName).strip()
349
+ if entry.sAMAccountName
350
+ else ""
351
+ )
352
+ if not cn or not sam or sam.startswith("$"):
353
+ continue
354
+
355
+ raw_users.append(
356
+ {
357
+ "cn": cn,
358
+ "sAMAccountName": sam,
359
+ "sn": str(entry.sn).strip() if entry.sn else "",
360
+ "mail": str(entry.mail).strip()
361
+ if entry.mail
362
+ else "",
363
+ "department": str(entry.department).strip()
364
+ if entry.department
365
+ else "",
366
+ "title": str(entry.title).strip()
367
+ if entry.title
368
+ else "",
369
+ "telephoneNumber": str(
370
+ entry.telephoneNumber
371
+ ).strip()
372
+ if entry.telephoneNumber
373
+ else "",
374
+ "distinguishedName": str(
375
+ entry.distinguishedName
376
+ ).strip()
377
+ if entry.distinguishedName
378
+ else "",
379
+ }
380
+ )
381
+
382
+ conn.unbind()
383
+ break # 任一 URL 成功即停止
384
+
385
+ except Exception as e:
386
+ last_error = e
387
+ SYLogger.warning(f"[WeComLDAP] LDAP 连接 {url} 失败 (第 {attempt} 次): {e}")
388
+ continue
389
+ else:
390
+ # 所有 URL 都失败
391
+ if attempt < max_retries:
392
+ time.sleep(retry_interval)
393
+ continue
394
+ else:
395
+ SYLogger.error(f"[WeComLDAP] LDAP 全部 {max_retries} 次重试均失败,最后一次错误: {last_error}")
396
+
397
+ break # 成功则跳出重试循环
386
398
 
387
399
  index = _LDAPIndex()
388
400
  index.build(raw_users)
@@ -99,7 +99,7 @@ class LLMWithTokenTracking(BaseChatModel):
99
99
  def _clamp_max_tokens(self, messages, **kwargs):
100
100
  """动态调整 max_tokens,确保 input + max_output 不超过上下文窗口
101
101
 
102
- 每次 LLM 调用前,估算当前 input tokens,
102
+ 每次 LLM 调用前,精确计算当前 input tokens,
103
103
  将 max_tokens = min(配置的 maxOutputTokens, context_window - input - buffer)
104
104
  """
105
105
  if not self.llmConfig or not self.llmConfig.maxTokens:
@@ -108,17 +108,66 @@ class LLMWithTokenTracking(BaseChatModel):
108
108
  if not max_output:
109
109
  return
110
110
 
111
- from langchain_core.messages.utils import count_tokens_approximately
112
111
  try:
113
- input_est = count_tokens_approximately(messages, chars_per_token=2.0)
112
+ input_est = self._count_tokens(messages)
114
113
  except Exception:
115
114
  return
116
115
 
117
- buffer = 4096
116
+ buffer = 8192
118
117
  available = self.llmConfig.maxTokens - input_est - buffer
119
118
  dynamic_max = min(max_output, max(available, 1024))
120
119
  self.llm.max_tokens = dynamic_max
121
120
 
121
+ @staticmethod
122
+ def _count_tokens(messages) -> int:
123
+ """精确计算 messages 的 token 数
124
+
125
+ 优先使用 tiktoken(OpenAI 兼容模型),否则回退到字符估算。
126
+ 中文等非 ASCII 文本 chars_per_token 约 1.0-1.5,比英文 2.0-4.0 更密集。
127
+ """
128
+ total_chars = 0
129
+ for msg in messages:
130
+ content = getattr(msg, 'content', '')
131
+ if isinstance(content, str):
132
+ total_chars += len(content)
133
+ elif isinstance(content, list):
134
+ for part in content:
135
+ if isinstance(part, str):
136
+ total_chars += len(part)
137
+ elif isinstance(part, dict):
138
+ total_chars += len(str(part))
139
+
140
+ # 检查是否有高比例非 ASCII(中文/日文等)
141
+ sample = str(total_chars)
142
+ non_ascii = sum(1 for c in sample if ord(c) > 127)
143
+ ratio = non_ascii / max(len(sample), 1)
144
+
145
+ # 中文等语言 chars_per_token 约 1.5,英文约 4.0
146
+ chars_per_token = 1.5 if ratio > 0.3 else 3.5
147
+
148
+ # 尝试 tiktoken 精确计数
149
+ try:
150
+ import tiktoken
151
+ enc = tiktoken.get_encoding("cl100k_base")
152
+ token_count = 0
153
+ for msg in messages:
154
+ content = getattr(msg, 'content', '')
155
+ if isinstance(content, str):
156
+ token_count += len(enc.encode(content))
157
+ elif isinstance(content, list):
158
+ for part in content:
159
+ if isinstance(part, str):
160
+ token_count += len(enc.encode(part))
161
+ elif isinstance(part, dict):
162
+ token_count += len(enc.encode(str(part)))
163
+ # 加上消息格式开销(role、separator 等)
164
+ return token_count + len(messages) * 4
165
+ except Exception:
166
+ pass
167
+
168
+ # 回退:字符估算 + 每条消息 4 token 格式开销
169
+ return int(total_chars / chars_per_token) + len(messages) * 4
170
+
122
171
  def _generate(self, messages, stop=None, run_manager=None, **kwargs):
123
172
  """
124
173
  同步生成 - 核心方法
@@ -174,17 +174,57 @@ class LLMWithAutoTokenUsage(BaseChatModel):
174
174
  if not max_output:
175
175
  return
176
176
 
177
- from langchain_core.messages.utils import count_tokens_approximately
178
177
  try:
179
- input_est = count_tokens_approximately(messages, chars_per_token=2.0)
178
+ input_est = self._count_tokens(messages)
180
179
  except Exception:
181
180
  return
182
181
 
183
- buffer = 4096
182
+ buffer = 8192
184
183
  available = self.llmConfig.maxTokens - input_est - buffer
185
184
  dynamic_max = min(max_output, max(available, 1024))
186
185
  self.llm.max_tokens = dynamic_max
187
186
 
187
+ @staticmethod
188
+ def _count_tokens(messages) -> int:
189
+ """精确计算 messages 的 token 数"""
190
+ total_chars = 0
191
+ for msg in messages:
192
+ content = getattr(msg, 'content', '')
193
+ if isinstance(content, str):
194
+ total_chars += len(content)
195
+ elif isinstance(content, list):
196
+ for part in content:
197
+ if isinstance(part, str):
198
+ total_chars += len(part)
199
+ elif isinstance(part, dict):
200
+ total_chars += len(str(part))
201
+
202
+ # 尝试 tiktoken 精确计数
203
+ try:
204
+ import tiktoken
205
+ enc = tiktoken.get_encoding("cl100k_base")
206
+ token_count = 0
207
+ for msg in messages:
208
+ content = getattr(msg, 'content', '')
209
+ if isinstance(content, str):
210
+ token_count += len(enc.encode(content))
211
+ elif isinstance(content, list):
212
+ for part in content:
213
+ if isinstance(part, str):
214
+ token_count += len(enc.encode(part))
215
+ elif isinstance(part, dict):
216
+ token_count += len(enc.encode(str(part)))
217
+ return token_count + len(messages) * 4
218
+ except Exception:
219
+ pass
220
+
221
+ # 回退:字符估算(中文 1.5,英文 3.5)
222
+ sample = str(total_chars)
223
+ non_ascii = sum(1 for c in sample if ord(c) > 127)
224
+ ratio = non_ascii / max(len(sample), 1)
225
+ chars_per_token = 1.5 if ratio > 0.3 else 3.5
226
+ return int(total_chars / chars_per_token) + len(messages) * 4
227
+
188
228
  # ========== 实现BaseChatModel抽象方法 ==========
189
229
  def _generate(self, messages, stop=None, run_manager=None, **kwargs):
190
230
  self._clamp_max_tokens(messages, **kwargs)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.5a22
3
+ Version: 0.2.5a24
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown