sycommon-python-lib 0.2.2a3__tar.gz → 0.2.2a5__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 (266) hide show
  1. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/PKG-INFO +7 -7
  2. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/pyproject.toml +7 -7
  3. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/cli.py +24 -3
  4. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/core/models.py +15 -0
  5. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/core/project.py +18 -7
  6. sycommon_python_lib-0.2.2a5/src/command/templates/cli/README.md.tpl +54 -0
  7. sycommon_python_lib-0.2.2a5/src/command/templates/cli/__init__.py +1 -0
  8. sycommon_python_lib-0.2.2a5/src/command/templates/cli/app.py.tpl +45 -0
  9. sycommon_python_lib-0.2.2a5/src/command/templates/cli/commands/__init__.py.tpl +1 -0
  10. sycommon_python_lib-0.2.2a5/src/command/templates/cli/commands/hello.py.tpl +6 -0
  11. sycommon_python_lib-0.2.2a5/src/command/templates/cli/pyproject.toml.tpl +14 -0
  12. sycommon_python_lib-0.2.2a5/src/command/templates/web/tools/__init__.py.tpl +3 -0
  13. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/agent/sandbox/file_ops.py +24 -53
  14. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/agent/sandbox/http_sandbox_backend.py +316 -202
  15. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/sandbox.py +641 -349
  16. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/models/sandbox.py +91 -0
  17. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon_python_lib.egg-info/PKG-INFO +7 -7
  18. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon_python_lib.egg-info/SOURCES.txt +7 -0
  19. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon_python_lib.egg-info/requires.txt +6 -6
  20. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/README.md +0 -0
  21. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/setup.cfg +0 -0
  22. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/__init__.py +0 -0
  23. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/core/__init__.py +0 -0
  24. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/core/console.py +0 -0
  25. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/core/utils.py +0 -0
  26. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/__init__.py +0 -0
  27. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/README.md.tpl +0 -0
  28. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/__init__.py +0 -0
  29. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/api/query.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/app.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  41. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  42. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  43. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  44. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/db/service.py.tpl +0 -0
  45. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  46. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/model/parse.py.tpl +0 -0
  47. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  48. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  49. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/.env.tpl +0 -0
  50. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/.gitignore.tpl +0 -0
  51. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/Dockerfile.tpl +0 -0
  52. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/README.md.tpl +0 -0
  53. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/__init__.py +0 -0
  54. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/app.py.tpl +0 -0
  55. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/app.yaml.tpl +0 -0
  56. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  57. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/client/__init__.py.tpl +0 -0
  58. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/model/__init__.py.tpl +0 -0
  59. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/model/file_info.py.tpl +0 -0
  60. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/base/requirements.txt.tpl +0 -0
  61. {sycommon_python_lib-0.2.2a3/src/command/templates/web → sycommon_python_lib-0.2.2a5/src/command/templates/cli}/tools/__init__.py.tpl +0 -0
  62. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/web/README.md.tpl +0 -0
  63. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/web/__init__.py +0 -0
  64. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/web/api/__init__.py.tpl +0 -0
  65. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/web/api/echo.py.tpl +0 -0
  66. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  68. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/web/app.py.tpl +0 -0
  69. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/web/client/__init__.py.tpl +0 -0
  70. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/web/model/__init__.py.tpl +0 -0
  71. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/command/templates/web/tools/mq.py.tpl +0 -0
  72. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/nexus/__init__.py +0 -0
  73. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/__init__.py +0 -0
  74. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/__main__.py +0 -0
  75. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/agents/__init__.py +0 -0
  76. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/agents/factory.py +0 -0
  77. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/agents/prompts.py +0 -0
  78. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/__init__.py +0 -0
  79. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/browser.py +0 -0
  80. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/capabilities/__init__.py +0 -0
  81. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/capabilities/console.py +0 -0
  82. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/capabilities/dom.py +0 -0
  83. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/capabilities/network.py +0 -0
  84. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  85. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/capabilities/performance.py +0 -0
  86. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  87. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/client.py +0 -0
  88. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/protocol.py +0 -0
  89. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cdp/repl.py +0 -0
  90. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/cli.py +0 -0
  91. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/commands/__init__.py +0 -0
  92. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/commands/cdp_cmd.py +0 -0
  93. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/commands/chat_cmd.py +0 -0
  94. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/commands/create_cmd.py +0 -0
  95. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/commands/evaluate_cmd.py +0 -0
  96. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/commands/init_cmd.py +0 -0
  97. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/commands/memory_cmd.py +0 -0
  98. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/commands/resume_cmd.py +0 -0
  99. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/commands/rollback_cmd.py +0 -0
  100. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/commands/run_cmd.py +0 -0
  101. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/core/__init__.py +0 -0
  102. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/core/backend.py +0 -0
  103. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/core/config.py +0 -0
  104. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/core/display.py +0 -0
  105. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/core/git_integration.py +0 -0
  106. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/core/llm.py +0 -0
  107. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/core/state.py +0 -0
  108. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/evaluate/__init__.py +0 -0
  109. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/evaluate/api_evaluator.py +0 -0
  110. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/memory/__init__.py +0 -0
  111. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/memory/compressor.py +0 -0
  112. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/memory/full.py +0 -0
  113. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/memory/hot.py +0 -0
  114. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/memory/manager.py +0 -0
  115. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/memory/warm.py +0 -0
  116. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/mode/__init__.py +0 -0
  117. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/mode/create.py +0 -0
  118. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/mode/optimize.py +0 -0
  119. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/models/__init__.py +0 -0
  120. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/models/config_models.py +0 -0
  121. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/__init__.py +0 -0
  122. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/baseline_tests.py +0 -0
  123. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/checkpoint.py +0 -0
  124. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/convergence.py +0 -0
  125. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/diagnosis.py +0 -0
  126. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/engine.py +0 -0
  127. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/environment.py +0 -0
  128. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/experience.py +0 -0
  129. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/harness_prompts.py +0 -0
  130. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/history.py +0 -0
  131. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/optimization_logger.py +0 -0
  132. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/pre_validation.py +0 -0
  133. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/reward.py +0 -0
  134. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/strategy_bandit.py +0 -0
  135. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/strategy_generator.py +0 -0
  136. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/rl/strategy_prompts.py +0 -0
  137. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycli/skills/__init__.py +0 -0
  138. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/__init__.py +0 -0
  139. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/agent/__init__.py +0 -0
  140. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/agent/agent_manager.py +0 -0
  141. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/agent/chat_events.py +0 -0
  142. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/agent/deep_agent.py +0 -0
  143. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/agent/multi_agent_team.py +0 -0
  144. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/agent/sandbox/__init__.py +0 -0
  145. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  146. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  147. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/agent/sandbox/session.py +0 -0
  148. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/auth/__init__.py +0 -0
  149. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/auth/ldap_service.py +0 -0
  150. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  151. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/Config.py +0 -0
  152. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/DatabaseConfig.py +0 -0
  153. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  154. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/EmbeddingConfig.py +0 -0
  155. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/LLMConfig.py +0 -0
  156. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/LangfuseConfig.py +0 -0
  157. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/MQConfig.py +0 -0
  158. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/RedisConfig.py +0 -0
  159. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/RerankerConfig.py +0 -0
  160. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/SentryConfig.py +0 -0
  161. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/XxlJobConfig.py +0 -0
  162. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/config/__init__.py +0 -0
  163. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/database/async_base_db_service.py +0 -0
  164. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/database/async_database_service.py +0 -0
  165. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/database/base_db_service.py +0 -0
  166. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/database/database_service.py +0 -0
  167. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/database/elasticsearch_service.py +0 -0
  168. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/database/redis_service.py +0 -0
  169. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/database/token_usage_db_service.py +0 -0
  170. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/health/__init__.py +0 -0
  171. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/health/health_check.py +0 -0
  172. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/health/metrics.py +0 -0
  173. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/health/ping.py +0 -0
  174. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/heartbeat_process/__init__.py +0 -0
  175. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  176. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  177. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  178. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/__init__.py +0 -0
  179. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/embedding.py +0 -0
  180. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/get_llm.py +0 -0
  181. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/llm_logger.py +0 -0
  182. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/llm_tokens.py +0 -0
  183. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  184. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  185. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  186. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/struct_token.py +0 -0
  187. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/sy_langfuse.py +0 -0
  188. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/token_usage_es_service.py +0 -0
  189. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  190. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/llm/usage_token.py +0 -0
  191. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/logging/__init__.py +0 -0
  192. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/logging/async_sql_logger.py +0 -0
  193. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/logging/kafka_log.py +0 -0
  194. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/logging/logger_levels.py +0 -0
  195. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/logging/logger_wrapper.py +0 -0
  196. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/logging/process_logger.py +0 -0
  197. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/logging/sql_logger.py +0 -0
  198. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/__init__.py +0 -0
  199. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/background_execution.py +0 -0
  200. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/context.py +0 -0
  201. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/cors.py +0 -0
  202. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/docs.py +0 -0
  203. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/exception.py +0 -0
  204. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/middleware.py +0 -0
  205. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/monitor_memory.py +0 -0
  206. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/mq.py +0 -0
  207. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/timeout.py +0 -0
  208. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/token_tracking.py +0 -0
  209. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/middleware/traceid.py +0 -0
  210. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/models/__init__.py +0 -0
  211. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/models/base_http.py +0 -0
  212. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/models/log.py +0 -0
  213. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/models/mqlistener_config.py +0 -0
  214. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/models/mqmsg_model.py +0 -0
  215. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/models/mqsend_config.py +0 -0
  216. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/models/sso_user.py +0 -0
  217. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/models/token_usage.py +0 -0
  218. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/models/token_usage_mysql.py +0 -0
  219. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/models/xxljob_handler_config.py +0 -0
  220. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/notice/__init__.py +0 -0
  221. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  222. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  223. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  224. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  225. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  226. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  227. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  228. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  229. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  230. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  231. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/sentry/__init__.py +0 -0
  232. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/sentry/sy_sentry.py +0 -0
  233. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/services.py +0 -0
  234. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/sse/__init__.py +0 -0
  235. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/sse/event.py +0 -0
  236. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/sse/sse.py +0 -0
  237. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/__init__.py +0 -0
  238. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/example.py +0 -0
  239. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/example2.py +0 -0
  240. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/feign.py +0 -0
  241. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/feign_client.py +0 -0
  242. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/nacos_client_base.py +0 -0
  243. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  244. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  245. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/nacos_service.py +0 -0
  246. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  247. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  248. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/synacos/param.py +0 -0
  249. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tests/deep_agent_server.py +0 -0
  250. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tests/test_deep_agent.py +0 -0
  251. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tests/test_email.py +0 -0
  252. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tests/test_mq.py +0 -0
  253. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tools/__init__.py +0 -0
  254. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tools/async_utils.py +0 -0
  255. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tools/docs.py +0 -0
  256. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tools/env.py +0 -0
  257. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tools/merge_headers.py +0 -0
  258. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tools/snowflake.py +0 -0
  259. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tools/syemail.py +0 -0
  260. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/tools/timing.py +0 -0
  261. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/xxljob/__init__.py +0 -0
  262. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon/xxljob/xxljob_service.py +0 -0
  263. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  264. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  265. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  266. {sycommon_python_lib-0.2.2a3 → sycommon_python_lib-0.2.2a5}/tests/test_sycli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.2a3
3
+ Version: 0.2.2a5
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -11,18 +11,18 @@ Requires-Dist: anyio>=4.12.1
11
11
  Requires-Dist: decorator>=5.2.1
12
12
  Requires-Dist: deepagents>=0.5.3
13
13
  Requires-Dist: elasticsearch>=9.3.0
14
- Requires-Dist: fastapi>=0.136.0
14
+ Requires-Dist: fastapi>=0.136.1
15
15
  Requires-Dist: jinja2>=3.1.6
16
16
  Requires-Dist: kafka-python>=2.3.1
17
17
  Requires-Dist: langchain>=1.2.15
18
- Requires-Dist: langchain-core>=1.3.0
19
- Requires-Dist: langchain-openai>=1.2.0
20
- Requires-Dist: langfuse>=4.5.0
18
+ Requires-Dist: langchain-core>=1.3.2
19
+ Requires-Dist: langchain-openai>=1.2.1
20
+ Requires-Dist: langfuse>=4.5.1
21
21
  Requires-Dist: langgraph>=1.1.9
22
22
  Requires-Dist: langgraph-checkpoint-redis>=0.4.1
23
23
  Requires-Dist: ldap3>=2.9.1
24
24
  Requires-Dist: loguru>=0.7.3
25
- Requires-Dist: mysql-connector-python>=9.6.0
25
+ Requires-Dist: mysql-connector-python>=9.7.0
26
26
  Requires-Dist: nacos-sdk-python<3.0,>=2.0.11
27
27
  Requires-Dist: psutil>=7.2.2
28
28
  Requires-Dist: pyxxl>=0.4.6
@@ -35,7 +35,7 @@ Requires-Dist: sentry-sdk[fastapi]>=2.58.0
35
35
  Requires-Dist: sqlalchemy[asyncio]>=2.0.48
36
36
  Requires-Dist: starlette[full]>=1.0.0
37
37
  Requires-Dist: tiktoken>=0.12.0
38
- Requires-Dist: uvicorn>=0.45.0
38
+ Requires-Dist: uvicorn>=0.46.0
39
39
  Requires-Dist: wecom-aibot-python-sdk>=1.0.2
40
40
 
41
41
  # sycommon-python-lib
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.2.2a3"
3
+ version = "0.2.2a5"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -12,18 +12,18 @@ dependencies = [
12
12
  "decorator>=5.2.1",
13
13
  "deepagents>=0.5.3",
14
14
  "elasticsearch>=9.3.0",
15
- "fastapi>=0.136.0",
15
+ "fastapi>=0.136.1",
16
16
  "jinja2>=3.1.6",
17
17
  "kafka-python>=2.3.1",
18
18
  "langchain>=1.2.15",
19
- "langchain-core>=1.3.0",
20
- "langchain-openai>=1.2.0",
21
- "langfuse>=4.5.0",
19
+ "langchain-core>=1.3.2",
20
+ "langchain-openai>=1.2.1",
21
+ "langfuse>=4.5.1",
22
22
  "langgraph>=1.1.9",
23
23
  "langgraph-checkpoint-redis>=0.4.1",
24
24
  "ldap3>=2.9.1",
25
25
  "loguru>=0.7.3",
26
- "mysql-connector-python>=9.6.0",
26
+ "mysql-connector-python>=9.7.0",
27
27
  "nacos-sdk-python>=2.0.11,<3.0",
28
28
  "psutil>=7.2.2",
29
29
  "pyxxl>=0.4.6",
@@ -36,7 +36,7 @@ dependencies = [
36
36
  "sqlalchemy[asyncio]>=2.0.48",
37
37
  "starlette[full]>=1.0.0",
38
38
  "tiktoken>=0.12.0",
39
- "uvicorn>=0.45.0",
39
+ "uvicorn>=0.46.0",
40
40
  "wecom-aibot-python-sdk>=1.0.2",
41
41
  ]
42
42
 
@@ -49,6 +49,12 @@ def create_init_parser(subparsers) -> None:
49
49
  web - 标准 FastAPI Web 服务,适合 RESTful API 开发
50
50
  agent - AI Agent 服务,基于 langgraph 实现状态图
51
51
 
52
+ CLI 项目结构:
53
+ commands/ - 子命令目录
54
+ model/ - 数据模型
55
+ client/ - 外部服务客户端
56
+ app.py - CLI 入口 (argparse)
57
+
52
58
  Agent 项目结构:
53
59
  agent/ - Agent 核心 (main_agent, nodes, states, enums)
54
60
  api/sse/ - SSE 流式接口
@@ -79,7 +85,7 @@ Web 项目结构:
79
85
  # 位置参数
80
86
  init_parser.add_argument(
81
87
  "project_type",
82
- choices=["web", "agent"],
88
+ choices=["web", "agent", "cli"],
83
89
  help="项目类型:web / agent"
84
90
  )
85
91
  init_parser.add_argument(
@@ -221,6 +227,8 @@ def _detect_project_type(project_path) -> str | None:
221
227
  if (project_path / "agent" / "main_agent.py").exists() or \
222
228
  (project_path / "agent" / "enums").is_dir():
223
229
  return "agent"
230
+ if (project_path / "commands").is_dir() and (project_path / "app.py").exists():
231
+ return "cli"
224
232
  if (project_path / "api").is_dir():
225
233
  return "web"
226
234
  return None
@@ -247,13 +255,19 @@ def handle_doctor_command(args) -> bool:
247
255
  warnings.append("无法识别项目类型 (非 web / agent 标准结构)")
248
256
 
249
257
  # 1. 检查必要文件
250
- required_files = ["app.py", "requirements.txt"]
258
+ if project_type == "cli":
259
+ required_files = ["app.py", "pyproject.toml"]
260
+ else:
261
+ required_files = ["app.py", "requirements.txt"]
251
262
  for file in required_files:
252
263
  if not (project_path / file).exists():
253
264
  issues.append(f"缺少必要文件: {file}")
254
265
 
255
266
  # 2. 检查配置文件
256
- config_files = ["app.yaml", ".env"]
267
+ if project_type == "cli":
268
+ config_files = [".env"]
269
+ else:
270
+ config_files = ["app.yaml", ".env"]
257
271
  for file in config_files:
258
272
  if not (project_path / file).exists():
259
273
  warnings.append(f"缺少配置文件: {file}")
@@ -276,6 +290,8 @@ def handle_doctor_command(args) -> bool:
276
290
  issues.append(f"缺少 Agent 核心文件: {file}")
277
291
  elif project_type == "web":
278
292
  required_dirs = ["api", "model", "tools", "client"]
293
+ elif project_type == "cli":
294
+ required_dirs = ["commands", "model", "tools"]
279
295
  else:
280
296
  required_dirs = ["api", "model", "tools"]
281
297
 
@@ -351,6 +367,11 @@ def handle_list_command(args) -> bool:
351
367
  "api/sse/", "api/query.py", "tools/", "model/", "db/"],
352
368
  "features": "nacos, kafka_log, llm, sentry (默认启用)",
353
369
  },
370
+ "cli": {
371
+ "desc": "Python CLI 命令行工具 (argparse)",
372
+ "dirs": ["commands/", "model/", "client/"],
373
+ "features": "无默认依赖 (精简模板)",
374
+ },
354
375
  }
355
376
 
356
377
  for name, info in templates.items():
@@ -13,6 +13,19 @@ AGENT_DEFAULTS = {
13
13
  "llm": True,
14
14
  }
15
15
 
16
+ # CLI 项目默认关闭所有服务依赖
17
+ CLI_DEFAULTS = {
18
+ "database": False,
19
+ "rabbitmq": False,
20
+ "nacos": False,
21
+ "kafka_log": False,
22
+ "sse": False,
23
+ "llm": False,
24
+ "redis": False,
25
+ "elasticsearch": False,
26
+ "sentry": False,
27
+ }
28
+
16
29
 
17
30
  @dataclass
18
31
  class FeatureOptions:
@@ -32,6 +45,8 @@ class FeatureOptions:
32
45
  """根据项目类型返回推荐默认配置"""
33
46
  if project_type == "agent":
34
47
  return cls(**AGENT_DEFAULTS)
48
+ if project_type == "cli":
49
+ return cls(**CLI_DEFAULTS)
35
50
  return cls()
36
51
 
37
52
  def to_template_vars(self) -> dict:
@@ -153,13 +153,19 @@ def init_project(
153
153
  'db/', 'db/service.py', 'db/model/', 'db/model/entity.py',
154
154
  ],
155
155
  }
156
+ # CLI 项目不需要的服务端文件
157
+ cli_skip_files = {'app.yaml', 'app.yaml.tpl', 'requirements.txt', 'requirements.txt.tpl', 'Dockerfile', 'Dockerfile.tpl'}
156
158
  disabled_features = {
157
159
  key for key, flag_val in features.to_template_vars().items()
158
160
  if flag_val == 'false' and key in feature_map
159
161
  }
160
162
 
161
163
  def _should_skip(rel_path: str) -> bool:
162
- """检查文件是否因功能关闭而应跳过"""
164
+ """检查文件是否因功能关闭或项目类型而应跳过"""
165
+ # CLI 项目跳过不需要的服务端文件
166
+ if project_type == "cli":
167
+ if rel_path in cli_skip_files or rel_path.replace('.tpl', '') in cli_skip_files:
168
+ return True
163
169
  for feat_key in disabled_features:
164
170
  for pattern in feature_map[feat_key]:
165
171
  if pattern in rel_path:
@@ -191,7 +197,7 @@ def init_project(
191
197
  copied_files = _render_files(file_mappings, context, project_path, verbose)
192
198
 
193
199
  if copied_files > 0:
194
- _print_success_message(project_path, project_name, copied_files)
200
+ _print_success_message(project_path, project_name, copied_files, project_type)
195
201
  return True
196
202
  else:
197
203
  print_warning("未创建任何文件,可能是缺少模板文件或模板路径配置错误")
@@ -284,7 +290,8 @@ def _render_files(
284
290
  def _print_success_message(
285
291
  project_path: Path,
286
292
  project_name: str,
287
- copied_files: int
293
+ copied_files: int,
294
+ project_type: str = "web",
288
295
  ) -> None:
289
296
  """打印成功信息"""
290
297
  print_success(f"模板工程 {project_name} 创建完成!")
@@ -293,7 +300,11 @@ def _print_success_message(
293
300
  print()
294
301
  print_info("下一步操作:")
295
302
  print(f" cd {project_name}")
296
- print(f" # 建议先创建虚拟环境")
297
- print(f" python -m venv .venv && source .venv/bin/activate")
298
- print(f" pip install -r requirements.txt")
299
- print(f" python app.py")
303
+ if project_type == "cli":
304
+ print(f" uv sync")
305
+ print(f" uv run python app.py")
306
+ else:
307
+ print(f" # 建议先创建虚拟环境")
308
+ print(f" python -m venv .venv && source .venv/bin/activate")
309
+ print(f" pip install -r requirements.txt")
310
+ print(f" python app.py")
@@ -0,0 +1,54 @@
1
+ # {{ project_name }}
2
+
3
+ {{ project_name }} - Python CLI 命令行工具
4
+
5
+ ## 项目结构
6
+
7
+ ```
8
+ {{ project_name }}/
9
+ ├── commands/ # 子命令目录
10
+ │ ├── __init__.py
11
+ │ └── hello.py # 示例子命令
12
+ ├── tools/ # 工具函数
13
+ ├── model/ # 数据模型
14
+ ├── client/ # 外部服务客户端
15
+ ├── app.py # CLI 入口
16
+ ├── pyproject.toml # uv 项目配置
17
+ └── README.md
18
+ ```
19
+
20
+ ## 快速开始
21
+
22
+ ### 安装依赖
23
+ ```bash
24
+ uv sync
25
+ ```
26
+
27
+ ### 使用
28
+ ```bash
29
+ # 查看帮助
30
+ uv run python app.py -h
31
+
32
+ # hello 命令
33
+ uv run python app.py hello --name "World"
34
+
35
+ # 查看版本
36
+ uv run python app.py version
37
+ ```
38
+
39
+ ### 添加新子命令
40
+
41
+ 1. 在 `commands/` 目录下创建新模块,例如 `commands/xxx.py`
42
+ 2. 实现 `handle_xxx(args)` 函数
43
+ 3. 在 `app.py` 中注册子命令:
44
+
45
+ ```python
46
+ from commands.xxx import handle_xxx
47
+
48
+ # 在 create_parser() 中添加:
49
+ xxx_parser = subparsers.add_parser("xxx", help="xxx 说明")
50
+
51
+ # 在 main() 中添加:
52
+ elif args.command == "xxx":
53
+ handle_xxx(args)
54
+ ```
@@ -0,0 +1 @@
1
+ """CLI 项目模板"""
@@ -0,0 +1,45 @@
1
+ """
2
+ {{ project_name }} - CLI 工具入口
3
+ 创建时间: {{ create_time }}
4
+ 作者: {{ author }}
5
+ """
6
+ import argparse
7
+ import sys
8
+
9
+ from commands.hello import handle_hello
10
+
11
+
12
+ def create_parser() -> argparse.ArgumentParser:
13
+ """创建命令行解析器"""
14
+ parser = argparse.ArgumentParser(
15
+ prog="{{ project_name }}",
16
+ description="{{ project_name }} - CLI 命令行工具",
17
+ )
18
+
19
+ subparsers = parser.add_subparsers(dest="command", help="子命令")
20
+
21
+ # hello 子命令
22
+ hello_parser = subparsers.add_parser("hello", help="打招呼")
23
+ hello_parser.add_argument("--name", default="World", help="名字")
24
+
25
+ # version 子命令
26
+ subparsers.add_parser("version", help="显示版本")
27
+
28
+ return parser
29
+
30
+
31
+ def main() -> None:
32
+ """CLI 主入口"""
33
+ parser = create_parser()
34
+ args = parser.parse_args()
35
+
36
+ if args.command == "hello":
37
+ handle_hello(args)
38
+ elif args.command == "version":
39
+ print("{{ project_name }} 1.0.0")
40
+ else:
41
+ parser.print_help()
42
+
43
+
44
+ if __name__ == "__main__":
45
+ main()
@@ -0,0 +1,6 @@
1
+ """hello 子命令"""
2
+
3
+
4
+ def handle_hello(args) -> None:
5
+ """处理 hello 命令"""
6
+ print(f"Hello, {args.name}!")
@@ -0,0 +1,14 @@
1
+ [project]
2
+ name = "{{ project_name }}"
3
+ version = "0.1.0"
4
+ description = "{{ project_name }} - CLI 命令行工具"
5
+ readme = "README.md"
6
+ requires-python = ">=3.11"
7
+ dependencies = []
8
+
9
+ [project.scripts]
10
+ {{ short_project_name }} = "app:main"
11
+
12
+ [build-system]
13
+ requires = ["hatchling"]
14
+ build-backend = "hatchling.build"
@@ -0,0 +1,3 @@
1
+ """
2
+ 工具函数模块
3
+ """
@@ -149,11 +149,11 @@ class FileOperationsMixin:
149
149
  def _check_workspace_exists_sync(self: "HTTPSandboxBackend") -> bool:
150
150
  """检查沙箱工作空间是否存在(同步版本)"""
151
151
  try:
152
- self._post_sync(f"{SANDBOX_API_PREFIX}/ls", {
152
+ result = self._post_sync(f"{SANDBOX_API_PREFIX}/stat", {
153
153
  "path": "/",
154
154
  "user_id": self.user_id
155
155
  })
156
- return True
156
+ return result.get("exists", False)
157
157
  except Exception as e:
158
158
  SYLogger.warning(f"[Sandbox] 检查工作空间失败: {e}")
159
159
  return False
@@ -161,11 +161,11 @@ class FileOperationsMixin:
161
161
  async def _check_workspace_exists_async(self: "HTTPSandboxBackend") -> bool:
162
162
  """检查沙箱工作空间是否存在(异步版本)"""
163
163
  try:
164
- await self._post_async_with_failover(f"{SANDBOX_API_PREFIX}/ls", {
164
+ result = await self._post_async_with_failover(f"{SANDBOX_API_PREFIX}/stat", {
165
165
  "path": "/",
166
166
  "user_id": self.user_id
167
167
  })
168
- return True
168
+ return result.get("exists", False)
169
169
  except Exception as e:
170
170
  SYLogger.warning(f"[Sandbox] 检查工作空间失败: {e}")
171
171
  return False
@@ -184,47 +184,31 @@ class FileOperationsMixin:
184
184
  """列出目录内容"""
185
185
  try:
186
186
  self._ensure_synced_sync()
187
- print(
188
- f"[Sandbox-DEBUG] ls() called with path={repr(path)}, user_id={repr(self.user_id)}", flush=True)
189
187
  SYLogger.info(f"[Sandbox] 列出目录: {path}")
190
188
  result = self._post_sync(f"{SANDBOX_API_PREFIX}/ls", {
191
189
  "path": path,
192
190
  "user_id": self.user_id
193
191
  })
194
- print(
195
- f"[Sandbox-DEBUG] ls() raw result type={type(result).__name__}, repr={repr(result)[:500]}", flush=True)
196
192
  entries = [FileInfo(**item) for item in result]
197
- print(
198
- f"[Sandbox-DEBUG] ls() parsed entries={len(entries)}", flush=True)
199
193
  SYLogger.info(f"[Sandbox] 目录内容: {len(entries)} 项")
200
194
  return LsResult(entries=entries)
201
195
  except Exception as e:
202
- print(
203
- f"[Sandbox-DEBUG] ls() EXCEPTION: {type(e).__name__}: {e}", flush=True)
204
196
  SYLogger.error(f"[Sandbox] 列出目录失败: {e}")
205
197
  return LsResult(error=str(e))
206
198
 
207
199
  async def als(self: "HTTPSandboxBackend", path: str) -> LsResult:
208
- """异步列出目录内容(真正的异步实现)"""
200
+ """异步列出目录内容"""
209
201
  try:
210
202
  await self._ensure_synced_async()
211
- print(
212
- f"[Sandbox-DEBUG] als() called with path={repr(path)}, user_id={repr(self.user_id)}, base_url={repr(self._base_url if hasattr(self, '_base_url') else 'N/A')}", flush=True)
213
203
  SYLogger.info(f"[Sandbox] 异步列出目录: {path}")
214
204
  result = await self._post_async_with_failover(f"{SANDBOX_API_PREFIX}/ls", {
215
205
  "path": path,
216
206
  "user_id": self.user_id
217
207
  })
218
- print(
219
- f"[Sandbox-DEBUG] als() raw result type={type(result).__name__}, repr={repr(result)[:500]}", flush=True)
220
208
  entries = [FileInfo(**item) for item in result]
221
- print(
222
- f"[Sandbox-DEBUG] als() parsed entries={len(entries)}, first 3 paths={[e.get('path','?') if isinstance(e, dict) else getattr(e, 'path','?') for e in entries[:3]]}", flush=True)
223
209
  SYLogger.info(f"[Sandbox] 目录内容: {len(entries)} 项")
224
210
  return LsResult(entries=entries)
225
211
  except Exception as e:
226
- print(
227
- f"[Sandbox-DEBUG] als() EXCEPTION: {type(e).__name__}: {e}", flush=True)
228
212
  SYLogger.error(f"[Sandbox] 异步列出目录失败: {e}")
229
213
  return LsResult(error=str(e))
230
214
 
@@ -251,15 +235,11 @@ class FileOperationsMixin:
251
235
  SYLogger.error(f"[Sandbox] 读取文件失败: {result['error']}")
252
236
  return ReadResult(error=result["error"])
253
237
  content = result.get("content", "")
254
- SYLogger.info(f"[Sandbox] 读取完成: {len(content)} 字符")
255
- # 构建 FileData 格式
256
- from datetime import datetime
257
- now = datetime.now().isoformat()
238
+ encoding = result.get("encoding", "utf-8")
239
+ SYLogger.info(f"[Sandbox] 读取完成: {len(content)} 字符, encoding={encoding}")
258
240
  file_data = FileData(
259
241
  content=content,
260
- encoding="utf-8",
261
- created_at=result.get("created_at", now),
262
- modified_at=result.get("modified_at", now),
242
+ encoding=encoding,
263
243
  )
264
244
  return ReadResult(file_data=file_data)
265
245
  except Exception as e:
@@ -287,14 +267,11 @@ class FileOperationsMixin:
287
267
  SYLogger.error(f"[Sandbox] 异步读取文件失败: {result['error']}")
288
268
  return ReadResult(error=result["error"])
289
269
  content = result.get("content", "")
290
- SYLogger.info(f"[Sandbox] 异步读取完成: {len(content)} 字符")
291
- from datetime import datetime
292
- now = datetime.now().isoformat()
270
+ encoding = result.get("encoding", "utf-8")
271
+ SYLogger.info(f"[Sandbox] 异步读取完成: {len(content)} 字符, encoding={encoding}")
293
272
  file_data = FileData(
294
273
  content=content,
295
- encoding="utf-8",
296
- created_at=result.get("created_at", now),
297
- modified_at=result.get("modified_at", now),
274
+ encoding=encoding,
298
275
  )
299
276
  return ReadResult(file_data=file_data)
300
277
  except Exception as e:
@@ -602,29 +579,23 @@ class FileOperationsMixin:
602
579
  # ============== 文件存在检查 ==============
603
580
 
604
581
  async def astat(self: "HTTPSandboxBackend", path: str) -> "StatResult":
605
- """异步检查文件或目录是否存在(尝试 read 一行来判断)"""
582
+ """异步检查文件或目录状态(使用 /stat 端点)"""
606
583
  try:
607
584
  await self._ensure_synced_async()
608
- SYLogger.info(f"[Sandbox] 异步检查文件存在: {path}")
609
-
610
- result = await self._post_async_with_failover(f"{SANDBOX_API_PREFIX}/read", {
611
- "file_path": path,
612
- "user_id": self.user_id,
613
- "offset": 0,
614
- "limit": 1,
585
+ SYLogger.info(f"[Sandbox] 异步查询文件状态: {path}")
586
+ result = await self._post_async_with_failover(f"{SANDBOX_API_PREFIX}/stat", {
587
+ "path": path,
588
+ "user_id": self.user_id
615
589
  })
616
- # read 成功返回结果说明文件存在
617
- if result and not result.get("error"):
618
- return StatResult(path=path, exists=True, is_dir=False, size=0)
619
-
620
- error = result.get("error", "") if result else ""
621
- # 如果错误是 is a directory,说明是目录,也存在
622
- if "is a directory" in error.lower() or "is_dir" in error.lower():
623
- return StatResult(path=path, exists=True, is_dir=True, size=0)
624
-
625
- return StatResult(path=path, exists=False)
590
+ return StatResult(
591
+ path=result.get("path", path),
592
+ exists=result.get("exists", False),
593
+ is_dir=result.get("is_dir", False),
594
+ size=result.get("size", 0),
595
+ error=result.get("error")
596
+ )
626
597
  except Exception as e:
627
- SYLogger.error(f"[Sandbox] 异步检查文件存在异常: {e}")
598
+ SYLogger.error(f"[Sandbox] 异步查询文件状态异常: {e}")
628
599
  return StatResult(path=path, error=str(e))
629
600
 
630
601