sycommon-python-lib 0.2.10a14__tar.gz → 0.2.10a15__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 (379) hide show
  1. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/context.py +8 -0
  4. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/traceid.py +45 -14
  5. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_client.py +35 -0
  6. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/feign.py +18 -0
  7. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/feign_client.py +12 -0
  8. sycommon_python_lib-0.2.10a15/src/sycommon/tools/sso_token.py +103 -0
  9. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  10. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/SOURCES.txt +1 -0
  11. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/README.md +0 -0
  12. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/setup.cfg +0 -0
  13. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/__init__.py +0 -0
  14. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/cli.py +0 -0
  15. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/core/__init__.py +0 -0
  16. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/core/console.py +0 -0
  17. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/core/models.py +0 -0
  18. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/core/project.py +0 -0
  19. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/core/utils.py +0 -0
  20. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/__init__.py +0 -0
  21. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/README.md.tpl +0 -0
  22. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/__init__.py +0 -0
  23. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  24. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  25. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  26. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  27. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  28. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  29. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/api/query.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/app.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/db/service.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/model/parse.py.tpl +0 -0
  41. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  42. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  43. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/.env.tpl +0 -0
  44. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/.gitignore.tpl +0 -0
  45. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/Dockerfile.tpl +0 -0
  46. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/README.md.tpl +0 -0
  47. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/__init__.py +0 -0
  48. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/app.py.tpl +0 -0
  49. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/app.yaml.tpl +0 -0
  50. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  51. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/client/__init__.py.tpl +0 -0
  52. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/model/__init__.py.tpl +0 -0
  53. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/model/file_info.py.tpl +0 -0
  54. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/requirements.txt.tpl +0 -0
  55. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/README.md.tpl +0 -0
  56. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/__init__.py +0 -0
  57. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/app.py.tpl +0 -0
  58. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  59. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  60. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  61. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  62. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/README.md.tpl +0 -0
  63. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/__init__.py +0 -0
  64. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/api/__init__.py.tpl +0 -0
  65. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/api/echo.py.tpl +0 -0
  66. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  68. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/app.py.tpl +0 -0
  69. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/client/__init__.py.tpl +0 -0
  70. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/model/__init__.py.tpl +0 -0
  71. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  72. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/tools/mq.py.tpl +0 -0
  73. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/nexus/__init__.py +0 -0
  74. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/__init__.py +0 -0
  75. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/__main__.py +0 -0
  76. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/acp/__init__.py +0 -0
  77. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/acp/config.py +0 -0
  78. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/acp/executor.py +0 -0
  79. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/acp/registry.py +0 -0
  80. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/acp/server.py +0 -0
  81. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/agents/__init__.py +0 -0
  82. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/agents/factory.py +0 -0
  83. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/agents/prompts.py +0 -0
  84. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/__init__.py +0 -0
  85. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/browser.py +0 -0
  86. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/__init__.py +0 -0
  87. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/console.py +0 -0
  88. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/dom.py +0 -0
  89. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/network.py +0 -0
  90. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  91. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/performance.py +0 -0
  92. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  93. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/client.py +0 -0
  94. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/protocol.py +0 -0
  95. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/repl.py +0 -0
  96. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cli.py +0 -0
  97. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/__init__.py +0 -0
  98. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/acp_cmd.py +0 -0
  99. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/acp_serve_cmd.py +0 -0
  100. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/cdp_cmd.py +0 -0
  101. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/chat_cmd.py +0 -0
  102. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/create_cmd.py +0 -0
  103. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/evaluate_cmd.py +0 -0
  104. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/init_cmd.py +0 -0
  105. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/memory_cmd.py +0 -0
  106. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/resume_cmd.py +0 -0
  107. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/rollback_cmd.py +0 -0
  108. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/run_cmd.py +0 -0
  109. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/__init__.py +0 -0
  110. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/backend.py +0 -0
  111. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/config.py +0 -0
  112. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/display.py +0 -0
  113. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/git_integration.py +0 -0
  114. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/llm.py +0 -0
  115. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/state.py +0 -0
  116. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/evaluate/__init__.py +0 -0
  117. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/evaluate/api_evaluator.py +0 -0
  118. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/__init__.py +0 -0
  119. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/compressor.py +0 -0
  120. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/full.py +0 -0
  121. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/hot.py +0 -0
  122. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/manager.py +0 -0
  123. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/warm.py +0 -0
  124. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/mode/__init__.py +0 -0
  125. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/mode/create.py +0 -0
  126. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/mode/optimize.py +0 -0
  127. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/models/__init__.py +0 -0
  128. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/models/config_models.py +0 -0
  129. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/__init__.py +0 -0
  130. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/baseline_tests.py +0 -0
  131. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/checkpoint.py +0 -0
  132. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/convergence.py +0 -0
  133. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/diagnosis.py +0 -0
  134. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/engine.py +0 -0
  135. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/environment.py +0 -0
  136. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/experience.py +0 -0
  137. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/harness_prompts.py +0 -0
  138. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/history.py +0 -0
  139. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/optimization_logger.py +0 -0
  140. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/pre_validation.py +0 -0
  141. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/reward.py +0 -0
  142. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/strategy_bandit.py +0 -0
  143. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/strategy_generator.py +0 -0
  144. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/strategy_prompts.py +0 -0
  145. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/simple_chat_agent.py +0 -0
  146. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/skills/__init__.py +0 -0
  147. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/__init__.py +0 -0
  148. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/__init__.py +0 -0
  149. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/__init__.py +0 -0
  150. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/client.py +0 -0
  151. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/fetch.py +0 -0
  152. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/server_adapter.py +0 -0
  153. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/ssh_init.py +0 -0
  154. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/tool.py +0 -0
  155. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/agent_manager.py +0 -0
  156. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/chat_events.py +0 -0
  157. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/deep_agent.py +0 -0
  158. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/mcp/__init__.py +0 -0
  159. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/mcp/models.py +0 -0
  160. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/mcp/tool_loader.py +0 -0
  161. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/middleware/model_request_prep.py +0 -0
  162. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/middleware/sandbox_path_guard.py +0 -0
  163. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/middleware/sensitive_guard.py +0 -0
  164. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/middleware/skill_write_guard.py +0 -0
  165. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/multi_agent_team.py +0 -0
  166. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/reasoning_content_patch.py +0 -0
  167. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/resume_compactor.py +0 -0
  168. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/__init__.py +0 -0
  169. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/consistent_hash.py +0 -0
  170. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  171. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  172. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
  173. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  174. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  175. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/session.py +0 -0
  176. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/skills_retry_patch.py +0 -0
  177. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/summarization_utils.py +0 -0
  178. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/__init__.py +0 -0
  179. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/ldap_service.py +0 -0
  180. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/oa_cache.py +0 -0
  181. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/oa_crypto.py +0 -0
  182. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/oa_service.py +0 -0
  183. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  184. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/ACPAgentConfig.py +0 -0
  185. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/Config.py +0 -0
  186. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/DatabaseConfig.py +0 -0
  187. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/EgressPolicyConfig.py +0 -0
  188. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  189. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/EmbeddingConfig.py +0 -0
  190. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/LLMConfig.py +0 -0
  191. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/LangfuseConfig.py +0 -0
  192. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/MQConfig.py +0 -0
  193. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/PgConfig.py +0 -0
  194. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/RedisConfig.py +0 -0
  195. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/RerankerConfig.py +0 -0
  196. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/SentryConfig.py +0 -0
  197. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/XxlJobConfig.py +0 -0
  198. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/__init__.py +0 -0
  199. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/config_change_notifier.py +0 -0
  200. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/async_base_db_service.py +0 -0
  201. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/async_database_service.py +0 -0
  202. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/base_db_service.py +0 -0
  203. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/database_service.py +0 -0
  204. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/elasticsearch_service.py +0 -0
  205. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/pg_checkpoint_service.py +0 -0
  206. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/redis_service.py +0 -0
  207. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/resilient_pg_saver.py +0 -0
  208. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/token_usage_db_service.py +0 -0
  209. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/health/__init__.py +0 -0
  210. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/health/health_check.py +0 -0
  211. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/health/metrics.py +0 -0
  212. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/health/ping.py +0 -0
  213. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/health/readiness.py +0 -0
  214. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/heartbeat_process/__init__.py +0 -0
  215. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  216. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  217. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  218. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/__init__.py +0 -0
  219. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/embedding.py +0 -0
  220. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/get_llm.py +0 -0
  221. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/llm_logger.py +0 -0
  222. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/llm_tokens.py +0 -0
  223. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  224. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  225. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  226. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/struct_token.py +0 -0
  227. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/sy_langfuse.py +0 -0
  228. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  229. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
  230. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/token_usage_es_service.py +0 -0
  231. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  232. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/token_utils.py +0 -0
  233. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/usage_token.py +0 -0
  234. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/__init__.py +0 -0
  235. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/async_sql_logger.py +0 -0
  236. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/bounded_kafka_sink.py +0 -0
  237. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/bounded_stdout_sink.py +0 -0
  238. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/kafka_log.py +0 -0
  239. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/log_masker.py +0 -0
  240. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/logger_levels.py +0 -0
  241. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/logger_wrapper.py +0 -0
  242. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/process_logger.py +0 -0
  243. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/sql_logger.py +0 -0
  244. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/mcp_server/__init__.py +0 -0
  245. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/mcp_server/server.py +0 -0
  246. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/__init__.py +0 -0
  247. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/cors.py +0 -0
  248. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/docs.py +0 -0
  249. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/egress_wall.py +0 -0
  250. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/exception.py +0 -0
  251. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/middleware.py +0 -0
  252. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/monitor_memory.py +0 -0
  253. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/mq.py +0 -0
  254. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/sandbox.py +0 -0
  255. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/sandbox_gateway.py +0 -0
  256. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/timeout.py +0 -0
  257. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/token_tracking.py +0 -0
  258. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/tool_result_truncation.py +0 -0
  259. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/__init__.py +0 -0
  260. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/base_http.py +0 -0
  261. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/log.py +0 -0
  262. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/mcp_server_config.py +0 -0
  263. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/mqlistener_config.py +0 -0
  264. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/mqmsg_model.py +0 -0
  265. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/mqsend_config.py +0 -0
  266. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/sandbox.py +0 -0
  267. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/sso_user.py +0 -0
  268. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/token_usage.py +0 -0
  269. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/token_usage_mysql.py +0 -0
  270. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/xxljob_handler_config.py +0 -0
  271. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/notice/__init__.py +0 -0
  272. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  273. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/notice/wecom_message.py +0 -0
  274. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  275. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbit_management_client.py +0 -0
  276. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  277. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  278. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  279. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  280. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  281. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  282. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  283. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/sentry/__init__.py +0 -0
  284. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/sentry/sy_sentry.py +0 -0
  285. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/services.py +0 -0
  286. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/sse/__init__.py +0 -0
  287. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/sse/event.py +0 -0
  288. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/sse/sse.py +0 -0
  289. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/__init__.py +0 -0
  290. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/example.py +0 -0
  291. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/example2.py +0 -0
  292. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_client_base.py +0 -0
  293. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  294. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  295. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_service.py +0 -0
  296. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  297. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  298. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/param.py +0 -0
  299. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/deep_agent_server.py +0 -0
  300. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_backend_factory_compat.py +0 -0
  301. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consistent_hash.py +0 -0
  302. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consume_dedup.py +0 -0
  303. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consumer_broker_health.py +0 -0
  304. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consumer_loss_rootcause.py +0 -0
  305. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consumer_recovery.py +0 -0
  306. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consumer_recovery_fix.py +0 -0
  307. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consumer_tags_sync.py +0 -0
  308. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_db_keepalive.py +0 -0
  309. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_deep_agent.py +0 -0
  310. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
  311. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_email.py +0 -0
  312. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_encoding_cache.py +0 -0
  313. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_env_tenant_helper.py +0 -0
  314. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_exp_concurrent_migrate.py +0 -0
  315. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_exp_delete_queue_with_consumers.py +0 -0
  316. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_fault_injection_real.py +0 -0
  317. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_fix_verification.py +0 -0
  318. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_heartbeat_timeout.py +0 -0
  319. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_integration_real_broker.py +0 -0
  320. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_mcp_server.py +0 -0
  321. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
  322. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_mq.py +0 -0
  323. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_mq_config_driven.py +0 -0
  324. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_nacos_llm_real.py +0 -0
  325. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_oa_login.py +0 -0
  326. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_queue_priority_fallback.py +0 -0
  327. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_queue_priority_upgrade_timing.py +0 -0
  328. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_real_summarization.py +0 -0
  329. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_reconnect_scenarios.py +0 -0
  330. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_sandbox_glob_hardening.py +0 -0
  331. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_services_plugin_defaults.py +0 -0
  332. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_summarization_config.py +0 -0
  333. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_summarization_real.py +0 -0
  334. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_summary_leak_e2e.py +0 -0
  335. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_upgrade_aio_pika.py +0 -0
  336. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_upgrade_langgraph_stream.py +0 -0
  337. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_upgrade_verification.py +0 -0
  338. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/__init__.py +0 -0
  339. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/async_utils.py +0 -0
  340. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/docs.py +0 -0
  341. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/env.py +0 -0
  342. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/merge_headers.py +0 -0
  343. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/snowflake.py +0 -0
  344. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/syemail.py +0 -0
  345. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/time_utils.py +0 -0
  346. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/timing.py +0 -0
  347. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/user_id.py +0 -0
  348. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/xxljob/__init__.py +0 -0
  349. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/xxljob/xxljob_service.py +0 -0
  350. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  351. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  352. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  353. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  354. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_acp_tool.py +0 -0
  355. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_asyncio_logging.py +0 -0
  356. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_config_change_notifier.py +0 -0
  357. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_frame_alignment.py +0 -0
  358. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_hotreload_snapshot.py +0 -0
  359. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_kafka_upie_fix.py +0 -0
  360. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_llm_apikey_contextvar.py +0 -0
  361. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_log_masker.py +0 -0
  362. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_print_capture.py +0 -0
  363. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_resilient_pg_saver.py +0 -0
  364. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sandbox_path_guard.py +0 -0
  365. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sensitive_guard.py +0 -0
  366. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_simple_chat_agent.py +0 -0
  367. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_skill_regex_upgrade.py +0 -0
  368. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_skill_write_guard.py +0 -0
  369. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sql_params_full.py +0 -0
  370. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_streaming_e2e.py +0 -0
  371. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_summary_echo_break_loop.py +0 -0
  372. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sycli.py +0 -0
  373. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sylogger_fixes.py +0 -0
  374. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sync_skills_to_sandbox.py +0 -0
  375. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_time_utils.py +0 -0
  376. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_traceid_omit_base64.py +0 -0
  377. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_unicode_decode_regress.py +0 -0
  378. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_upload_concurrency.py +0 -0
  379. {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_upload_e2e_http.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.10a14
3
+ Version: 0.2.10a15
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.10a14"
3
+ version = "0.2.10a15"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -4,6 +4,14 @@ current_trace_id = contextvars.ContextVar("trace_id", default=None)
4
4
 
5
5
  current_headers = contextvars.ContextVar("headers", default=None)
6
6
 
7
+ # 请求作用域网关用户(解析后的 SsoUser dict,非 token 原文 — 凭证红线:
8
+ # token 原文不进任何可被日志/异常路径带走的结构)。入口中间件(traceid.py
9
+ # _gateway_user_ctx)写入:token 头解出;缺失时 default_system_sso_user()
10
+ # 兜底(Java UserContextHandlerInterceptor 无 token 分支同款)。feign 出站
11
+ # 读取重签 token 头(sso_token.sign_sso_token,Java FeignRequestInterceptor
12
+ # 对齐)。finally reset(与 current_headers 同生命周期)。
13
+ current_sso_user = contextvars.ContextVar("sso_user", default=None)
14
+
7
15
  # per-user LLM 网关 apiKey:agent 创建入口 set,get_llm 读取,沿 task 树传播。
8
16
  # 为 None 时 get_llm 回退到 LLMConfig.apiKey 全局 key。
9
17
  current_llm_api_key = contextvars.ContextVar("llm_api_key", default=None)
@@ -5,6 +5,7 @@ from typing import Dict, Any
5
5
  from fastapi import Request, Response
6
6
  from sycommon.logging.kafka_log import SYLogger
7
7
  from sycommon.logging.log_masker import masker as _log_masker
8
+ from sycommon.middleware.context import current_sso_user
8
9
  from sycommon.tools.merge_headers import merge_headers
9
10
  from sycommon.tools.snowflake import Snowflake
10
11
 
@@ -35,6 +36,12 @@ _HEADER_WHITELIST = frozenset({
35
36
  b"x-role-header",
36
37
  b"x-customer-header",
37
38
  b"x-host-name",
39
+ # 🔑 Java FeignRequestInterceptor requestHeaders 列表成员(续,
40
+ # 2026-10-19 字节码核对):tips/req-type 原样转发;sy-call-source
41
+ # Java 从 MDC 读(MdcFilter 入站搬进 MDC),此处从头白名单等价承载。
42
+ b"tips",
43
+ b"req-type",
44
+ b"sy-call-source",
38
45
  })
39
46
 
40
47
 
@@ -57,30 +64,50 @@ def _gateway_user_ctx(request) -> list:
57
64
  覆写 token 头下发。这里解出 customerId/reqSource 并以合成键返回
58
65
  (并入 current_headers 供 _tenant_user_context 读取);token 头本身
59
66
  绝不进上下文(凭证红线)。任何失败返回 []。
67
+
68
+ 🔑 feign 出站重签(2026-10-19 Java FeignRequestInterceptor 对齐):
69
+ 解析成功的 SsoUser dict 同时写入 current_sso_user ContextVar(feign
70
+ 出站 sign_sso_token 重签 token 头用);token 缺失/解析失败时写入
71
+ default_system_sso_user() 兜底(Java preHandle 无 token 分支的
72
+ ThreadLocal 填充同款 — 链路上每跳恒有用户)。调用方须在 finally
73
+ reset(与 header_token 同生命周期,见 setup_trace_id_handler)。
60
74
  """
61
75
  import base64
62
76
  import gzip
63
77
  import io
64
78
  import json as _json
65
79
 
80
+ from sycommon.tools.sso_token import default_system_sso_user
81
+
82
+ sso = None
66
83
  try:
67
84
  raw_token = request.headers.get("token") or ""
68
- if not raw_token:
69
- return []
70
- decoded = base64.b64decode(raw_token.strip())
71
- with gzip.GzipFile(fileobj=io.BytesIO(decoded)) as zf:
72
- body = zf.read()
73
- sso = _json.loads(body)
74
- if not isinstance(sso, dict):
75
- return []
76
- out = []
77
- if sso.get("customerId"):
78
- out.append((b"x-customer-header", str(sso["customerId"]).encode()))
79
- if sso.get("reqSource"):
80
- out.append((b"sy-req-source", str(sso["reqSource"]).encode()))
81
- return out
85
+ if raw_token:
86
+ decoded = base64.b64decode(raw_token.strip())
87
+ with gzip.GzipFile(fileobj=io.BytesIO(decoded)) as zf:
88
+ body = zf.read()
89
+ parsed = _json.loads(body)
90
+ if isinstance(parsed, dict):
91
+ sso = parsed
82
92
  except Exception:
93
+ sso = None
94
+ # 兜底:无 token/解析失败 → SYSTEM 用户(Java preHandle 同款);
95
+ # 兜底不产生合成 header(合成键语义 = 从真实 token 提取,兜底用户
96
+ # 的 customerId 不进日志上下文 — 保持日志字段与旧行为一致)。
97
+ if sso is None:
98
+ current_sso_user.set(default_system_sso_user(request.url.path))
83
99
  return []
100
+ # username 派生键:Java getUsername() 返回 userId 且被 Jackson 序列化
101
+ # (token 恒含该键),网关下发的原始 token 里已有则不动。
102
+ if sso.get("userId") and not sso.get("username"):
103
+ sso["username"] = sso["userId"]
104
+ current_sso_user.set(sso)
105
+ out = []
106
+ if sso.get("customerId"):
107
+ out.append((b"x-customer-header", str(sso["customerId"]).encode()))
108
+ if sso.get("reqSource"):
109
+ out.append((b"sy-req-source", str(sso["reqSource"]).encode()))
110
+ return out
84
111
 
85
112
 
86
113
  def _omit_base64_content(obj: Any) -> None:
@@ -510,6 +537,10 @@ def setup_trace_id_handler(app):
510
537
  if not had_exception:
511
538
  SYLogger.reset_trace_id(token)
512
539
  SYLogger.reset_headers(header_token)
540
+ # current_sso_user 与 header_token 同生命周期重置(feign
541
+ # 出站重签的请求作用域用户;残留会让下一请求/后台任务拿
542
+ # 到旧用户 — 6b5ea4d token 残留教训同款)。
543
+ current_sso_user.set(None)
513
544
  # 如果 had_exception 为 True,这里什么都不做,保留 ContextVar 供 Exception Handler 读取
514
545
 
515
546
  return app
@@ -613,8 +613,10 @@ class RabbitMQClient:
613
613
  # → current_headers 等价物(tenantId/userId 进 Kafka 日志字段)。
614
614
  # finally reset —— 对齐 Java 的 MDC.clear(),防止泄漏到同连接的后续回调。
615
615
  from sycommon.models.sso_user import SsoUser
616
+ from sycommon.middleware.context import current_sso_user
616
617
  ctx_token = None
617
618
  trace_token = None
619
+ sso_token = None
618
620
  try:
619
621
  body_dict = json.loads(message.body.decode("utf-8"))
620
622
  msg_obj: MQMsgModel = MQMsgModel(**body_dict)
@@ -654,6 +656,22 @@ class RabbitMQClient:
654
656
  (b"x-tenant-header", (sso.tenant_id or "").encode()),
655
657
  (b"x-userid-header", (sso.user_id or "").encode()),
656
658
  ])
659
+ # 🔑 完整 SsoUser 进 current_sso_user(对齐 Java
660
+ # SimpleMessageListenerContainerHelper 的
661
+ # UserContext.putContext):handler 里再发起 feign 调用时
662
+ # 出站 token 重签依赖它 — 只 set_headers 的话 feign 出站
663
+ # 取不到用户,token 头丢用户上下文。finally reset(与
664
+ # ctx_token 同生命周期)。
665
+ # model_dump(mode='json'):datetime → ISO 字符串 — feign
666
+ # 出站 sign_sso_token 会再 json.dumps,裸 datetime 会
667
+ # TypeError 炸掉整个出站调用。username 派生键:Java
668
+ # getUsername() 返回 userId 且序列化,显式补齐。
669
+ # 不 exclude_none:对齐 Java Jackson ALWAYS — null 字段
670
+ # 照样输出,不省略任何键。
671
+ sso_dict = sso.model_dump(by_alias=True, mode='json')
672
+ if sso.user_id and not sso_dict.get('username'):
673
+ sso_dict['username'] = sso.user_id
674
+ sso_token = current_sso_user.set(sso_dict)
657
675
  except Exception as ctx_err:
658
676
  logger.debug(f"MQ context header 恢复失败(忽略): {ctx_err}")
659
677
 
@@ -702,6 +720,8 @@ class RabbitMQClient:
702
720
  SYLogger.reset_trace_id(trace_token)
703
721
  if ctx_token is not None:
704
722
  SYLogger.reset_headers(ctx_token)
723
+ if sso_token is not None:
724
+ current_sso_user.reset(sso_token)
705
725
 
706
726
  @staticmethod
707
727
  async def _safe_ack(message) -> None:
@@ -731,6 +751,9 @@ class RabbitMQClient:
731
751
  JSON 解析失败等「消息本身坏掉」的场景在 _process_message_callback
732
752
  里直接 ack 丢弃(重投也不可能成功)。
733
753
  """
754
+ # 🔑 current_sso_user 在本方法内多处使用(同步 handler 线程传递);
755
+ # 函数内导入与 _process_message_callback 同风格(避免模块级循环依赖)。
756
+ from sycommon.middleware.context import current_sso_user
734
757
  async with self._task_semaphore:
735
758
  # 🔑 区分「业务异常」与「ack 网络调用异常」:业务阶段(handler 执行)
736
759
  # 抛的任何异常——包括 ConnectionError/TimeoutError(业务调下游 HTTP/DB
@@ -755,6 +778,13 @@ class RabbitMQClient:
755
778
  # 的 Context 拷贝天然带上;同步 handler 必须闭包显式传。
756
779
  trace_id = msg_obj.traceId
757
780
  headers_snapshot = SYLogger.get_headers()
781
+ # 🔑 同步 handler 的 sso 快照(2026-10-19 复审缺口修复):
782
+ # 与 traceId/headers 同理 —— run_in_executor 不拷贝
783
+ # contextvars,线程里 current_sso_user 是 None → 同步
784
+ # handler 内发起 feign 出站不带 token 头,下游 Java 拿
785
+ # 不到用户。异步 handler 靠 create_task 的 Context 拷贝
786
+ # 天然带上,无需此处处理。
787
+ sso_snapshot = current_sso_user.get()
758
788
  loop = asyncio.get_running_loop()
759
789
 
760
790
  def _sync_wrapper():
@@ -767,9 +797,14 @@ class RabbitMQClient:
767
797
  headers_token = None
768
798
  if headers_snapshot is not None:
769
799
  headers_token = SYLogger.set_headers(headers_snapshot)
800
+ sso_token = None
801
+ if sso_snapshot is not None:
802
+ sso_token = current_sso_user.set(sso_snapshot)
770
803
  try:
771
804
  return handler(msg_obj, message)
772
805
  finally:
806
+ if sso_token is not None:
807
+ current_sso_user.reset(sso_token)
773
808
  if headers_token is not None:
774
809
  SYLogger.reset_headers(headers_token)
775
810
  SYLogger.reset_trace_id(token)
@@ -6,7 +6,9 @@ import atexit
6
6
  import weakref
7
7
 
8
8
  from sycommon.tools.merge_headers import merge_headers
9
+ from sycommon.tools.sso_token import app_name, sign_sso_token
9
10
  from sycommon.tools.snowflake import Snowflake
11
+ from sycommon.middleware.context import current_sso_user
10
12
 
11
13
  import aiohttp
12
14
  from sycommon.logging.kafka_log import SYLogger
@@ -139,6 +141,22 @@ async def _feign_internal(service_name, api_path, method='GET', params=None, hea
139
141
  if "x-traceId-header" not in headers:
140
142
  headers["x-traceId-header"] = SYLogger.get_trace_id() or Snowflake.id
141
143
 
144
+ # 🔑 Java FeignRequestInterceptor 对齐(2026-10-19):服务间调用出站
145
+ # 三件套 —— Python/Go → Java 时下游 UserContextHandlerInterceptor 只认
146
+ # token 头里的 SsoUser,此前 Python 侧不带,下游拿不到用户上下文。
147
+ # 1. token 重签:请求作用域 SsoUser(current_sso_user,入口中间件解
148
+ # token 头写入;缺失时 SYSTEM 兜底)覆写 reqSource=本服务名后
149
+ # 重新 gzip+base64 写 token 头 — 链路每跳改写"是谁在调"
150
+ # (Java setReqSource(appName) 同款);
151
+ # 2. inner=1 无条件附加(显式已传则尊重):标记内部服务间调用,
152
+ # 下游 InnerHandler 拦截器据此放行(X-Request-Gateway 校验)。
153
+ # 显式传入的 headers 已在 merge_headers 中以 target 侧胜出,此处
154
+ # token 只在调用方未显式传时写入(不覆盖显式值)。
155
+ sso = current_sso_user.get()
156
+ if sso is not None and "token" not in {k.lower() for k in headers}:
157
+ headers["token"] = sign_sso_token(sso, app_name())
158
+ headers.setdefault("inner", "1")
159
+
142
160
  # 处理JSON请求的Content-Type
143
161
  is_json_request = method.upper() in ["POST", "PUT", "PATCH"] and not (
144
162
  files or form_data or file_path)
@@ -9,7 +9,9 @@ from typing import Any, Dict, Optional, Literal, Type, TypeVar
9
9
  from urllib.parse import urljoin
10
10
 
11
11
  from sycommon.tools.merge_headers import merge_headers
12
+ from sycommon.tools.sso_token import app_name, sign_sso_token
12
13
  from sycommon.tools.snowflake import Snowflake
14
+ from sycommon.middleware.context import current_sso_user
13
15
 
14
16
  import aiohttp
15
17
  from pydantic import BaseModel
@@ -250,6 +252,16 @@ def feign_client(
250
252
  headers = merge_headers(SYLogger.get_headers(), headers)
251
253
  headers["x-traceId-header"] = SYLogger.get_trace_id() or Snowflake.id
252
254
 
255
+ # 🔑 Java FeignRequestInterceptor 对齐(2026-10-19,与
256
+ # feign.py 函数版同语义):token 重签(reqSource=本服务名)
257
+ # + inner=1。调用方经 @feign_request(headers=...) 或 Header
258
+ # 参数显式传了 token/inner 时不覆盖(下方 Header 参数注入
259
+ # 在其后执行,显式值最终胜出)。
260
+ sso = current_sso_user.get()
261
+ if sso is not None and "token" not in {k.lower() for k in headers}:
262
+ headers["token"] = sign_sso_token(sso, app_name())
263
+ headers.setdefault("inner", "1")
264
+
253
265
  # 处理参数中的Header类型
254
266
  for name, meta in param_meta.items():
255
267
  if isinstance(meta, Header) and name in bound_args:
@@ -0,0 +1,103 @@
1
+ """sso_token.py — 网关 token 头签发/兜底(对齐 Java)。
2
+
3
+ Java 侧两处源码语义:
4
+ 1. GzipUtils.zip / FeignRequestInterceptor:服务间调用出站时把当前
5
+ SsoUser 覆写 reqSource=本服务名(spring.application.name)后重新
6
+ gzip+base64 写 token 头 —— 链路每跳标识"是谁在调"。
7
+ 2. UserContextHandlerInterceptor.preHandle 无 token 分支:System.getenv
8
+ ("tenantId"/"customerId"/"userId")(缺省 T000001/TRIST/SYSTEM)
9
+ buildSsoUser 塞进 ThreadLocal —— 无网关入口也恒有用户上下文。
10
+
11
+ 凭证红线:这里只处理【解析后的 SsoUser dict】与【重签产物】,不接收/
12
+ 不存储 token 原文进任何上下文结构(日志侧 token 头不进白名单)。
13
+ """
14
+ import base64
15
+ import gzip
16
+ import io
17
+ import json
18
+ import os
19
+
20
+
21
+ def app_name() -> str:
22
+ """本服务注册名(nacos ServiceName)。
23
+
24
+ nacos_client_base.py:154 同源:Config().config.get('Name','')。
25
+ Java ${spring.application.name} 等价物 — feign 出站 token 重签时
26
+ 覆写 reqSource 用。Config 未初始化/未配置时返回空串(重签仍执行,
27
+ reqSource 落空串与旧 token 内值无关 — Java appName 空时同款)。
28
+ """
29
+ try:
30
+ from sycommon.config.Config import Config
31
+ return Config().config.get('Name', '')
32
+ except Exception:
33
+ return ''
34
+
35
+
36
+ def _java_datetime_form(payload: dict) -> None:
37
+ """把 MQ 路径带入的 ISO-8601 时间串归一为 Java 格式(原地改)。
38
+
39
+ HTTP 路径的 dict 是 Java token json.loads 产物,时间已是
40
+ yyyy-MM-dd HH:mm:ss.SSS 字符串,原样透传;MQ 路径 model_dump(mode='json')
41
+ 会把 datetime 序列化成 2026-10-19T12:30:01.123000(T 分隔 + 6 位微秒)
42
+ —— 与 Java 网关 token 不同形。下游 Java CustomLocalDateTimeDeserializer
43
+ 多格式兼容,但按逐字节同形要求归一(2026-10-19 复审发现 2:与 Go 侧
44
+ javaLocalDateTime.MarshalJSON 的 .000 三位毫秒对齐)。归一失败原样保留
45
+ (不因形态问题炸掉整条出站)。
46
+ """
47
+ import re
48
+ _iso = re.compile(
49
+ r'^(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(?:\.(\d+))?$')
50
+ for key in ('lastLogonTime', 'pwdExpiryDate'):
51
+ v = payload.get(key)
52
+ if not isinstance(v, str):
53
+ continue
54
+ m = _iso.match(v)
55
+ if m:
56
+ frac = (m.group(3) or '0')[:3].ljust(3, '0')
57
+ payload[key] = f"{m.group(1)} {m.group(2)}.{frac}"
58
+
59
+
60
+ def sign_sso_token(sso: dict, app_name_str: str) -> str:
61
+ """SsoUser dict → gzip+base64 token 头形态(Java GzipUtils.zip)。
62
+
63
+ reqSource 覆写 app_name_str(FeignRequestInterceptor.setReqSource
64
+ (appName) 同款)。原 dict 不被修改(浅拷贝后改)。
65
+ 字段不省略:对齐 Java Jackson ALWAYS — 所有 null 键照样输出;唯一
66
+ 剥离的是 password(Java @JsonIgnore,字节码确认是唯一被 Jackson
67
+ 忽略的业务字段;oldPassword/signKey/securityToken/accessToken/mur
68
+ 均无注解,全量保留)。
69
+ initStatus 补默认:Java 构造器 "N"。
70
+ 时间字段归一为 Java 格式(见 _java_datetime_form)。
71
+ """
72
+ payload = dict(sso) if isinstance(sso, dict) else {}
73
+ payload['reqSource'] = app_name_str
74
+ payload.pop('password', None)
75
+ if not payload.get('initStatus'):
76
+ payload['initStatus'] = 'N'
77
+ _java_datetime_form(payload)
78
+ body = json.dumps(payload, ensure_ascii=False).encode('utf-8')
79
+ buf = io.BytesIO()
80
+ with gzip.GzipFile(fileobj=buf, mode='wb') as zf:
81
+ zf.write(body)
82
+ return base64.b64encode(buf.getvalue()).decode('ascii')
83
+
84
+
85
+ def default_system_sso_user(request_path: str = '/') -> dict:
86
+ """无网关 token 时的 SYSTEM 兜底用户(Java UserContextHandlerInterceptor
87
+ 无 token 分支同款):env tenantId/customerId/userId,缺省
88
+ T000001/TRIST/SYSTEM;userName 取 userId 同值(Java buildSsoUser
89
+ 字节码 setUserName(userId));requestPath 由调用方给(Java 传
90
+ requestURI,非 HTTP 入口给 '/')。initStatus='N':Java SsoUser 构造器
91
+ 无条件初始化 + Jackson ALWAYS 包含 — token 恒含该键。
92
+ """
93
+ tenant = os.getenv('tenantId') or 'T000001'
94
+ customer = os.getenv('customerId') or 'TRIST'
95
+ user = os.getenv('userId') or 'SYSTEM'
96
+ return {
97
+ 'tenantId': tenant,
98
+ 'customerId': customer,
99
+ 'userId': user,
100
+ 'userName': user,
101
+ 'requestPath': request_path,
102
+ 'initStatus': 'N',
103
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.10a14
3
+ Version: 0.2.10a15
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -336,6 +336,7 @@ src/sycommon/tools/docs.py
336
336
  src/sycommon/tools/env.py
337
337
  src/sycommon/tools/merge_headers.py
338
338
  src/sycommon/tools/snowflake.py
339
+ src/sycommon/tools/sso_token.py
339
340
  src/sycommon/tools/syemail.py
340
341
  src/sycommon/tools/time_utils.py
341
342
  src/sycommon/tools/timing.py