sycommon-python-lib 0.2.5a6__tar.gz → 0.2.5a8__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 (283) hide show
  1. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/mcp/tool_loader.py +4 -17
  4. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/auth/wecom_ldap_service.py +61 -18
  5. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/struct_token.py +26 -24
  6. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  7. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/README.md +0 -0
  8. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/setup.cfg +0 -0
  9. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/__init__.py +0 -0
  10. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/cli.py +0 -0
  11. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/core/__init__.py +0 -0
  12. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/core/console.py +0 -0
  13. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/core/models.py +0 -0
  14. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/core/project.py +0 -0
  15. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/core/utils.py +0 -0
  16. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/__init__.py +0 -0
  17. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/README.md.tpl +0 -0
  18. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/__init__.py +0 -0
  19. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  20. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  21. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  22. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  23. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  24. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  25. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  26. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/api/query.py.tpl +0 -0
  27. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  28. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  29. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/app.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/db/service.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/model/parse.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/.env.tpl +0 -0
  40. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/.gitignore.tpl +0 -0
  41. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/Dockerfile.tpl +0 -0
  42. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/README.md.tpl +0 -0
  43. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/__init__.py +0 -0
  44. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/app.py.tpl +0 -0
  45. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/app.yaml.tpl +0 -0
  46. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  47. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/client/__init__.py.tpl +0 -0
  48. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/model/__init__.py.tpl +0 -0
  49. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/model/file_info.py.tpl +0 -0
  50. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/base/requirements.txt.tpl +0 -0
  51. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/cli/README.md.tpl +0 -0
  52. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/cli/__init__.py +0 -0
  53. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/cli/app.py.tpl +0 -0
  54. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  55. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  56. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  57. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  58. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/web/README.md.tpl +0 -0
  59. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/web/__init__.py +0 -0
  60. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/web/api/__init__.py.tpl +0 -0
  61. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/web/api/echo.py.tpl +0 -0
  62. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  63. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  64. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/web/app.py.tpl +0 -0
  65. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/web/client/__init__.py.tpl +0 -0
  66. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/web/model/__init__.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  68. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/command/templates/web/tools/mq.py.tpl +0 -0
  69. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/nexus/__init__.py +0 -0
  70. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/__init__.py +0 -0
  71. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/__main__.py +0 -0
  72. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/agents/__init__.py +0 -0
  73. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/agents/factory.py +0 -0
  74. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/agents/prompts.py +0 -0
  75. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/__init__.py +0 -0
  76. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/browser.py +0 -0
  77. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/capabilities/__init__.py +0 -0
  78. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/capabilities/console.py +0 -0
  79. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/capabilities/dom.py +0 -0
  80. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/capabilities/network.py +0 -0
  81. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  82. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/capabilities/performance.py +0 -0
  83. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  84. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/client.py +0 -0
  85. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/protocol.py +0 -0
  86. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cdp/repl.py +0 -0
  87. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/cli.py +0 -0
  88. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/commands/__init__.py +0 -0
  89. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/commands/cdp_cmd.py +0 -0
  90. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/commands/chat_cmd.py +0 -0
  91. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/commands/create_cmd.py +0 -0
  92. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/commands/evaluate_cmd.py +0 -0
  93. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/commands/init_cmd.py +0 -0
  94. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/commands/memory_cmd.py +0 -0
  95. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/commands/resume_cmd.py +0 -0
  96. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/commands/rollback_cmd.py +0 -0
  97. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/commands/run_cmd.py +0 -0
  98. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/core/__init__.py +0 -0
  99. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/core/backend.py +0 -0
  100. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/core/config.py +0 -0
  101. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/core/display.py +0 -0
  102. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/core/git_integration.py +0 -0
  103. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/core/llm.py +0 -0
  104. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/core/state.py +0 -0
  105. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/evaluate/__init__.py +0 -0
  106. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/evaluate/api_evaluator.py +0 -0
  107. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/memory/__init__.py +0 -0
  108. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/memory/compressor.py +0 -0
  109. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/memory/full.py +0 -0
  110. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/memory/hot.py +0 -0
  111. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/memory/manager.py +0 -0
  112. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/memory/warm.py +0 -0
  113. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/mode/__init__.py +0 -0
  114. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/mode/create.py +0 -0
  115. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/mode/optimize.py +0 -0
  116. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/models/__init__.py +0 -0
  117. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/models/config_models.py +0 -0
  118. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/__init__.py +0 -0
  119. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/baseline_tests.py +0 -0
  120. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/checkpoint.py +0 -0
  121. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/convergence.py +0 -0
  122. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/diagnosis.py +0 -0
  123. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/engine.py +0 -0
  124. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/environment.py +0 -0
  125. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/experience.py +0 -0
  126. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/harness_prompts.py +0 -0
  127. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/history.py +0 -0
  128. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/optimization_logger.py +0 -0
  129. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/pre_validation.py +0 -0
  130. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/reward.py +0 -0
  131. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/strategy_bandit.py +0 -0
  132. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/strategy_generator.py +0 -0
  133. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/rl/strategy_prompts.py +0 -0
  134. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycli/skills/__init__.py +0 -0
  135. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/__init__.py +0 -0
  136. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/__init__.py +0 -0
  137. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/agent_manager.py +0 -0
  138. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/chat_events.py +0 -0
  139. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/deep_agent.py +0 -0
  140. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/mcp/__init__.py +0 -0
  141. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/mcp/models.py +0 -0
  142. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/multi_agent_team.py +0 -0
  143. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/sandbox/__init__.py +0 -0
  144. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  145. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  146. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
  147. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  148. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  149. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/sandbox/session.py +0 -0
  150. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/agent/summarization_utils.py +0 -0
  151. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/auth/__init__.py +0 -0
  152. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/auth/ldap_service.py +0 -0
  153. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/auth/oa_cache.py +0 -0
  154. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/auth/oa_crypto.py +0 -0
  155. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/auth/oa_service.py +0 -0
  156. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/Config.py +0 -0
  157. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/DatabaseConfig.py +0 -0
  158. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  159. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/EmbeddingConfig.py +0 -0
  160. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/LLMConfig.py +0 -0
  161. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/LangfuseConfig.py +0 -0
  162. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/MQConfig.py +0 -0
  163. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/PgConfig.py +0 -0
  164. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/RedisConfig.py +0 -0
  165. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/RerankerConfig.py +0 -0
  166. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/SentryConfig.py +0 -0
  167. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/XxlJobConfig.py +0 -0
  168. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/config/__init__.py +0 -0
  169. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/database/async_base_db_service.py +0 -0
  170. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/database/async_database_service.py +0 -0
  171. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/database/base_db_service.py +0 -0
  172. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/database/database_service.py +0 -0
  173. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/database/elasticsearch_service.py +0 -0
  174. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/database/pg_checkpoint_service.py +0 -0
  175. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/database/redis_service.py +0 -0
  176. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/database/token_usage_db_service.py +0 -0
  177. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/health/__init__.py +0 -0
  178. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/health/health_check.py +0 -0
  179. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/health/metrics.py +0 -0
  180. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/health/ping.py +0 -0
  181. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/heartbeat_process/__init__.py +0 -0
  182. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  183. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  184. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  185. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/__init__.py +0 -0
  186. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/embedding.py +0 -0
  187. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/get_llm.py +0 -0
  188. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/llm_logger.py +0 -0
  189. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/llm_tokens.py +0 -0
  190. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  191. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  192. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  193. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/sy_langfuse.py +0 -0
  194. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/token_usage_es_service.py +0 -0
  195. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  196. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/llm/usage_token.py +0 -0
  197. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/logging/__init__.py +0 -0
  198. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/logging/async_sql_logger.py +0 -0
  199. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/logging/kafka_log.py +0 -0
  200. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/logging/logger_levels.py +0 -0
  201. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/logging/logger_wrapper.py +0 -0
  202. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/logging/process_logger.py +0 -0
  203. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/logging/sql_logger.py +0 -0
  204. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/__init__.py +0 -0
  205. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/background_execution.py +0 -0
  206. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/context.py +0 -0
  207. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/cors.py +0 -0
  208. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/docs.py +0 -0
  209. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/exception.py +0 -0
  210. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/middleware.py +0 -0
  211. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/monitor_memory.py +0 -0
  212. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/mq.py +0 -0
  213. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/sandbox.py +0 -0
  214. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/timeout.py +0 -0
  215. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/token_tracking.py +0 -0
  216. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/tool_result_truncation.py +0 -0
  217. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/middleware/traceid.py +0 -0
  218. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/models/__init__.py +0 -0
  219. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/models/base_http.py +0 -0
  220. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/models/log.py +0 -0
  221. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/models/mqlistener_config.py +0 -0
  222. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/models/mqmsg_model.py +0 -0
  223. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/models/mqsend_config.py +0 -0
  224. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/models/sandbox.py +0 -0
  225. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/models/sso_user.py +0 -0
  226. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/models/token_usage.py +0 -0
  227. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/models/token_usage_mysql.py +0 -0
  228. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/models/xxljob_handler_config.py +0 -0
  229. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/notice/__init__.py +0 -0
  230. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  231. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/notice/wecom_message.py +0 -0
  232. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  233. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  234. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  235. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  236. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  237. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  238. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  239. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  240. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  241. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/sentry/__init__.py +0 -0
  242. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/sentry/sy_sentry.py +0 -0
  243. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/services.py +0 -0
  244. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/sse/__init__.py +0 -0
  245. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/sse/event.py +0 -0
  246. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/sse/sse.py +0 -0
  247. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/__init__.py +0 -0
  248. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/example.py +0 -0
  249. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/example2.py +0 -0
  250. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/feign.py +0 -0
  251. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/feign_client.py +0 -0
  252. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/nacos_client_base.py +0 -0
  253. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  254. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  255. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/nacos_service.py +0 -0
  256. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  257. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  258. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/synacos/param.py +0 -0
  259. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tests/deep_agent_server.py +0 -0
  260. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tests/test_deep_agent.py +0 -0
  261. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tests/test_email.py +0 -0
  262. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
  263. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tests/test_mq.py +0 -0
  264. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tests/test_oa_login.py +0 -0
  265. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tests/test_real_summarization.py +0 -0
  266. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tests/test_summarization_config.py +0 -0
  267. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tests/test_summarization_real.py +0 -0
  268. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tools/__init__.py +0 -0
  269. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tools/async_utils.py +0 -0
  270. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tools/docs.py +0 -0
  271. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tools/env.py +0 -0
  272. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tools/merge_headers.py +0 -0
  273. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tools/snowflake.py +0 -0
  274. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tools/syemail.py +0 -0
  275. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/tools/timing.py +0 -0
  276. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/xxljob/__init__.py +0 -0
  277. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon/xxljob/xxljob_service.py +0 -0
  278. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
  279. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  280. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  281. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  282. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  283. {sycommon_python_lib-0.2.5a6 → sycommon_python_lib-0.2.5a8}/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.5a6
3
+ Version: 0.2.5a8
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.5a6"
3
+ version = "0.2.5a8"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -73,7 +73,7 @@ def wrap_tool_with_error_handler(
73
73
 
74
74
 
75
75
  def _make_user_id_interceptor(user_id: str):
76
- """创建 MCP 工具调用拦截器,注入 X-User-Id 和 X-OA-Session-Id header"""
76
+ """创建 MCP 工具调用拦截器,注入 X-User-Id header"""
77
77
  from langchain_mcp_adapters.interceptors import MCPToolCallRequest, MCPToolCallResult
78
78
  from typing import Callable, Awaitable
79
79
 
@@ -83,16 +83,6 @@ def _make_user_id_interceptor(user_id: str):
83
83
  ) -> MCPToolCallResult:
84
84
  headers = dict(request.headers or {})
85
85
  headers["X-User-Id"] = user_id
86
-
87
- # 自动获取 OA session_id 注入 header
88
- try:
89
- from sycommon.auth.oa_cache import oa_login_with_cache
90
- success, _, session_id = await oa_login_with_cache(user_id)
91
- if success and session_id:
92
- headers["X-OA-Session-Id"] = session_id
93
- except Exception:
94
- pass
95
-
96
86
  request = request.override(headers=headers)
97
87
  return await handler(request)
98
88
 
@@ -132,7 +122,6 @@ async def load_mcp_tools(
132
122
  for config in enabled_configs:
133
123
  try:
134
124
  from langchain_mcp_adapters.client import MultiServerMCPClient
135
- from langchain_mcp_adapters.tools import load_mcp_tools as _load_tools
136
125
 
137
126
  key = sanitize_name(config.name)
138
127
  client_config = {
@@ -144,18 +133,16 @@ async def load_mcp_tools(
144
133
  }
145
134
 
146
135
  client = MultiServerMCPClient(client_config)
147
- session = await client.session_for(key)
148
- await session.initialize()
149
136
 
150
- from langchain_mcp_adapters.tools import _list_all_tools
151
- raw_tools = await _list_all_tools(session)
137
+ async with client.session(key) as session:
138
+ from langchain_mcp_adapters.tools import _list_all_tools
139
+ raw_tools = await _list_all_tools(session)
152
140
 
153
141
  original_names = []
154
142
  for tool in raw_tools:
155
143
  original_name = tool.name
156
144
  original_names.append(original_name)
157
145
 
158
- # 使用 convert_mcp_tool_to_langchain_tool 带 interceptors
159
146
  from langchain_mcp_adapters.tools import convert_mcp_tool_to_langchain_tool
160
147
  lc_tool = convert_mcp_tool_to_langchain_tool(
161
148
  session,
@@ -3,7 +3,7 @@
3
3
 
4
4
  通过企微 userid 关联 LDAP 域账号,获取邮箱、部门、职位等完整信息。
5
5
 
6
- 关联策略:中文名优先 + 英文名兜底,匹配率约 95.8%。
6
+ 关联策略:中文名 英文名+中文姓 → 英文名前缀,匹配率约 98%。
7
7
 
8
8
  使用示例::
9
9
 
@@ -87,18 +87,21 @@ class WeComLDAPUser(BaseModel):
87
87
 
88
88
 
89
89
  class _LDAPIndex:
90
- """LDAP 用户索引(按 cnsAMAccountName 前缀建索引)"""
90
+ """LDAP 用户索引(按 cn、英文名+姓拼音、sAMAccountName 前缀建索引)"""
91
91
 
92
92
  def __init__(self):
93
93
  # cn(中文名) -> LDAPFullUser
94
94
  self.by_cn: Dict[str, LDAPFullUser] = {}
95
- # sAMAccountName 前缀(小写) -> [cn]
96
- self.by_sam_prefix: Dict[str, List[str]] = defaultdict(list)
95
+ # sAMAccountName 前缀(小写) -> [LDAPFullUser]
96
+ self.by_sam_prefix: Dict[str, List[LDAPFullUser]] = defaultdict(list)
97
+ # "en_prefix.sn_pinyin" -> [LDAPFullUser]
98
+ self.by_en_sn: Dict[str, List[LDAPFullUser]] = defaultdict(list)
97
99
 
98
100
  def build(self, users: List[dict]):
99
101
  """从 LDAP 查询结果构建索引"""
100
102
  self.by_cn.clear()
101
103
  self.by_sam_prefix.clear()
104
+ self.by_en_sn.clear()
102
105
 
103
106
  for u in users:
104
107
  cn = u.get("cn", "").strip()
@@ -126,14 +129,31 @@ class _LDAPIndex:
126
129
 
127
130
  # sAMAccountName 如 "sussie.xia" -> 前缀 "sussie"
128
131
  prefix = sam.split(".")[0].lower()
129
- self.by_sam_prefix[prefix].append(cn)
132
+ self.by_sam_prefix[prefix].append(ldap_user)
130
133
 
131
- def lookup(self, chinese_name: str, english_name: str = "") -> tuple:
134
+ # 英文名+姓(拼音)索引: "sussie.xiao"
135
+ sn = u.get("sn", "").strip()
136
+ if prefix and sn:
137
+ sn_pinyin = self._to_pinyin(sn)
138
+ if sn_pinyin:
139
+ self.by_en_sn[f"{prefix}.{sn_pinyin}"].append(ldap_user)
140
+
141
+ @staticmethod
142
+ def _to_pinyin(text: str) -> str:
143
+ """中文转拼音(小写)"""
144
+ try:
145
+ from pypinyin import pinyin, Style
146
+ return "".join(p[0] for p in pinyin(text, style=Style.NORMAL)).lower()
147
+ except Exception:
148
+ return ""
149
+
150
+ def lookup(self, chinese_name: str, english_name: str = "", surname: str = "", position: str = "") -> tuple:
132
151
  """查找匹配的 LDAP 用户
133
152
 
134
153
  Args:
135
- chinese_name: 中文名
136
- english_name: 英文名(来自企微 extattr
154
+ chinese_name: 中文名(企微 name)
155
+ english_name: 英文名(企微 extattr.英文名)
156
+ surname: 中文姓(取 chinese_name 首字)
137
157
 
138
158
  Returns:
139
159
  (LDAPFullUser | None, match_method | None)
@@ -142,16 +162,29 @@ class _LDAPIndex:
142
162
  if chinese_name in self.by_cn:
143
163
  return self.by_cn[chinese_name], "chinese_name"
144
164
 
145
- # 兜底:英文名前缀匹配
146
- if english_name:
147
- prefix = english_name.lower().split()[0]
148
- candidates = self.by_sam_prefix.get(prefix, [])
165
+ en_first = english_name.lower().split()[0] if english_name else ""
166
+
167
+ # 第二优先级:英文名 + 中文姓拼音
168
+ if en_first and surname:
169
+ surname_pinyin = self._to_pinyin(surname)
170
+ if surname_pinyin:
171
+ key = f"{en_first}.{surname_pinyin}"
172
+ candidates = self.by_en_sn.get(key, [])
173
+ if len(candidates) == 1:
174
+ return candidates[0], "english_name_surname"
175
+ elif len(candidates) > 1:
176
+ pass
177
+
178
+ # 第三优先级:英文名前缀匹配(唯一)
179
+ if en_first:
180
+ candidates = self.by_sam_prefix.get(en_first, [])
149
181
  if len(candidates) == 1:
150
- # 唯一匹配,直接返回
151
- return self.by_cn[candidates[0]], "english_name"
152
- elif len(candidates) > 1:
153
- # 重名,无法确定,不匹配
154
- pass
182
+ return candidates[0], "english_name"
183
+ elif len(candidates) > 1 and position:
184
+ # 多候选人时用职位消歧
185
+ pos_hits = [c for c in candidates if c.title and c.title in position]
186
+ if len(pos_hits) == 1:
187
+ return pos_hits[0], "english_name_position"
155
188
 
156
189
  return None, None
157
190
 
@@ -297,6 +330,7 @@ class WeComLDAPService(metaclass=SingletonMeta):
297
330
  attributes=[
298
331
  "cn",
299
332
  "sAMAccountName",
333
+ "sn",
300
334
  "mail",
301
335
  "department",
302
336
  "title",
@@ -320,6 +354,7 @@ class WeComLDAPService(metaclass=SingletonMeta):
320
354
  {
321
355
  "cn": cn,
322
356
  "sAMAccountName": sam,
357
+ "sn": str(entry.sn).strip() if entry.sn else "",
323
358
  "mail": str(entry.mail).strip()
324
359
  if entry.mail
325
360
  else "",
@@ -389,7 +424,15 @@ class WeComLDAPService(metaclass=SingletonMeta):
389
424
  english_name = self._parse_wecom_english_name(user_data)
390
425
  chinese_name = user_data.get("name", "")
391
426
 
392
- ldap_user, match_method = ldap_index.lookup(chinese_name, english_name)
427
+ # 提取中文姓(取中文名首字)
428
+ import re
429
+ surname = ""
430
+ if chinese_name and re.search(r'[一-鿿]', chinese_name[0]):
431
+ surname = chinese_name[0]
432
+
433
+ ldap_user, match_method = ldap_index.lookup(
434
+ chinese_name, english_name, surname, user_data.get("position", "")
435
+ )
393
436
 
394
437
  return WeComLDAPUser(
395
438
  wecom_userid=user_data.get("userid", ""),
@@ -10,10 +10,33 @@ from sycommon.llm.llm_logger import LLMLogger
10
10
  from langfuse import Langfuse, LangfuseSpan, propagate_attributes
11
11
  from typing import Dict, List, Optional, Any
12
12
  import tiktoken
13
- import threading
13
+ import os
14
14
  import warnings
15
15
  warnings.filterwarnings("ignore", message="Pydantic serializer warnings")
16
16
 
17
+ # 模块级 encoding 单例,所有实例共享,只初始化一次
18
+ _cached_encoding = None
19
+ _encoding_initialized = False
20
+
21
+
22
+ def _get_shared_encoding(model_name: str):
23
+ """获取模块级共享的 tiktoken encoding,只初始化一次"""
24
+ global _cached_encoding, _encoding_initialized
25
+ if _encoding_initialized:
26
+ return _cached_encoding
27
+
28
+ _encoding_initialized = True
29
+ try:
30
+ _cached_encoding = tiktoken.encoding_for_model(model_name)
31
+ except KeyError:
32
+ try:
33
+ _cached_encoding = tiktoken.get_encoding("cl100k_base")
34
+ except Exception as e:
35
+ SYLogger.error(f"tiktoken 初始化失败,将使用字符数近似估算: {e}")
36
+ except Exception as e:
37
+ SYLogger.error(f"tiktoken 初始化失败,将使用字符数近似估算: {e}")
38
+ return _cached_encoding
39
+
17
40
 
18
41
  class StructuredRunnableWithToken(Runnable):
19
42
  """
@@ -49,29 +72,8 @@ class StructuredRunnableWithToken(Runnable):
49
72
  self.max_compression_attempts = max_compression_attempts # 最大压缩尝试次数
50
73
  self.is_native_mode = is_native_mode # 是否为原生模式
51
74
 
52
- # 初始化 Tokenizer(5秒超时保护)
53
- self.encoding = None
54
-
55
- def _init_encoding():
56
- nonlocal encoding_result
57
- try:
58
- encoding_result = tiktoken.encoding_for_model(model_name)
59
- except KeyError:
60
- try:
61
- encoding_result = tiktoken.get_encoding("cl100k_base")
62
- except Exception as e:
63
- SYLogger.error(f"tiktoken get_encoding 失败: {e}")
64
- except Exception as e:
65
- SYLogger.error(f"tiktoken encoding_for_model 失败: {e}")
66
-
67
- encoding_result = None
68
- t = threading.Thread(target=_init_encoding, daemon=True)
69
- t.start()
70
- t.join(timeout=5)
71
- if t.is_alive():
72
- SYLogger.error("tiktoken 初始化超时(5s),将使用字符数近似估算")
73
- elif encoding_result is not None:
74
- self.encoding = encoding_result
75
+ # 初始化 Tokenizer(模块级单例,只初始化一次)
76
+ self.encoding = _get_shared_encoding(model_name)
75
77
 
76
78
  def _encode_text(self, text: str) -> int:
77
79
  """计算文本的 token 数量,encoding 不可用时按字符数近似估算"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.5a6
3
+ Version: 0.2.5a8
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown