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.
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/pyproject.toml +1 -1
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/context.py +8 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/traceid.py +45 -14
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_client.py +35 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/feign.py +18 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/feign_client.py +12 -0
- sycommon_python_lib-0.2.10a15/src/sycommon/tools/sso_token.py +103 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/SOURCES.txt +1 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/README.md +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/setup.cfg +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/cli.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/core/console.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/core/models.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/core/project.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/core/utils.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/api/query.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/db/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/db/service.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/model/parse.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/agent/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/.env.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/.gitignore.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/Dockerfile.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/app.yaml.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/model/file_info.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/requirements.txt.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/commands/hello.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/pyproject.toml.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/README.md.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/api/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/api/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/app.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/client/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/model/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/tools/__init__.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/tools/mq.py.tpl +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/nexus/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/__main__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/acp/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/acp/config.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/acp/executor.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/acp/registry.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/acp/server.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/agents/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/agents/factory.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/agents/prompts.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/browser.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/console.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/dom.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/network.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/page_errors.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/performance.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/screenshot.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/client.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/protocol.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/repl.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cli.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/acp_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/acp_serve_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/cdp_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/chat_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/create_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/evaluate_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/init_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/memory_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/resume_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/rollback_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/run_cmd.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/backend.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/config.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/display.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/git_integration.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/llm.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/core/state.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/evaluate/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/evaluate/api_evaluator.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/compressor.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/full.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/hot.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/manager.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/memory/warm.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/mode/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/mode/create.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/mode/optimize.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/models/config_models.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/baseline_tests.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/checkpoint.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/convergence.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/diagnosis.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/engine.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/environment.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/experience.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/harness_prompts.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/history.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/optimization_logger.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/pre_validation.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/reward.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/strategy_bandit.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/strategy_generator.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/rl/strategy_prompts.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/simple_chat_agent.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/skills/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/client.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/fetch.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/server_adapter.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/ssh_init.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/acp/tool.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/agent_manager.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/chat_events.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/deep_agent.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/mcp/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/mcp/models.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/mcp/tool_loader.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/middleware/model_request_prep.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/middleware/sandbox_path_guard.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/middleware/sensitive_guard.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/middleware/skill_write_guard.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/multi_agent_team.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/reasoning_content_patch.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/resume_compactor.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/consistent_hash.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/file_ops.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/sandbox/session.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/skills_retry_patch.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/agent/summarization_utils.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/ldap_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/oa_cache.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/oa_crypto.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/oa_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/auth/wecom_ldap_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/ACPAgentConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/Config.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/DatabaseConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/EgressPolicyConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/ElasticsearchConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/EmbeddingConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/LLMConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/LangfuseConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/MQConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/PgConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/RedisConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/RerankerConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/SentryConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/XxlJobConfig.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/config/config_change_notifier.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/async_base_db_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/async_database_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/base_db_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/database_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/elasticsearch_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/pg_checkpoint_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/redis_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/resilient_pg_saver.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/database/token_usage_db_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/health/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/health/health_check.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/health/metrics.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/health/ping.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/health/readiness.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/heartbeat_process/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/embedding.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/get_llm.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/llm_logger.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/llm_tokens.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/output_fixing_runnable.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/struct_token.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/sy_langfuse.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/token_usage_es_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/token_utils.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/llm/usage_token.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/async_sql_logger.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/bounded_kafka_sink.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/bounded_stdout_sink.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/kafka_log.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/log_masker.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/logger_levels.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/logger_wrapper.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/process_logger.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/logging/sql_logger.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/mcp_server/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/mcp_server/server.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/cors.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/docs.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/egress_wall.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/exception.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/middleware.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/monitor_memory.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/mq.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/sandbox.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/sandbox_gateway.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/timeout.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/token_tracking.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/tool_result_truncation.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/base_http.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/log.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/mcp_server_config.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/mqlistener_config.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/mqmsg_model.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/mqsend_config.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/sandbox.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/sso_user.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/token_usage.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/token_usage_mysql.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/models/xxljob_handler_config.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/notice/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/notice/uvicorn_monitor.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/notice/wecom_message.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbit_management_client.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/sentry/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/sentry/sy_sentry.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/services.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/sse/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/sse/event.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/sse/sse.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/example.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/example2.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_client_base.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_config_manager.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/nacos_service_registration.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/param.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/deep_agent_server.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_backend_factory_compat.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consistent_hash.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consume_dedup.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consumer_broker_health.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consumer_loss_rootcause.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consumer_recovery.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consumer_recovery_fix.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_consumer_tags_sync.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_db_keepalive.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_deep_agent.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_email.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_encoding_cache.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_env_tenant_helper.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_exp_concurrent_migrate.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_exp_delete_queue_with_consumers.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_fault_injection_real.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_fix_verification.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_heartbeat_timeout.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_integration_real_broker.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_mcp_server.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_mq.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_mq_config_driven.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_nacos_llm_real.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_oa_login.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_queue_priority_fallback.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_queue_priority_upgrade_timing.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_real_summarization.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_reconnect_scenarios.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_sandbox_glob_hardening.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_services_plugin_defaults.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_summarization_config.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_summarization_real.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_summary_leak_e2e.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_upgrade_aio_pika.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_upgrade_langgraph_stream.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tests/test_upgrade_verification.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/async_utils.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/docs.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/env.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/merge_headers.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/snowflake.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/syemail.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/time_utils.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/timing.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/tools/user_id.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/xxljob/__init__.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/xxljob/xxljob_service.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_acp_tool.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_asyncio_logging.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_config_change_notifier.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_frame_alignment.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_hotreload_snapshot.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_kafka_upie_fix.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_llm_apikey_contextvar.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_log_masker.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_print_capture.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_resilient_pg_saver.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sandbox_path_guard.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sensitive_guard.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_simple_chat_agent.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_skill_regex_upgrade.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_skill_write_guard.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sql_params_full.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_streaming_e2e.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_summary_echo_break_loop.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sycli.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sylogger_fixes.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_sync_skills_to_sandbox.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_time_utils.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_traceid_omit_base64.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_unicode_decode_regress.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_upload_concurrency.py +0 -0
- {sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/tests/test_upload_e2e_http.py +0 -0
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/context.py
RENAMED
|
@@ -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)
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/middleware/traceid.py
RENAMED
|
@@ -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
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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)
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/feign.py
RENAMED
|
@@ -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)
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycommon/synacos/feign_client.py
RENAMED
|
@@ -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
|
+
}
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/core/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/base/.env.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/cli/app.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/command/templates/web/app.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/agents/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/cdp/capabilities/dom.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.2.10a14 → sycommon_python_lib-0.2.10a15}/src/sycli/commands/acp_cmd.py
RENAMED
|
File without changes
|