wagent-framework 1.5.2__tar.gz → 2.0.0a2__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 (177) hide show
  1. wagent_framework-2.0.0a2/PKG-INFO +262 -0
  2. wagent_framework-2.0.0a2/README.md +193 -0
  3. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/setup.py +28 -17
  4. wagent_framework-2.0.0a2/tests/test_agent_templates.py +38 -0
  5. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/tests/test_aop.py +56 -27
  6. wagent_framework-2.0.0a2/tests/test_cli.py +375 -0
  7. wagent_framework-2.0.0a2/tests/test_component_chain.py +62 -0
  8. wagent_framework-2.0.0a2/tests/test_compositions.py +102 -0
  9. wagent_framework-2.0.0a2/tests/test_container.py +234 -0
  10. wagent_framework-2.0.0a2/tests/test_deployment.py +50 -0
  11. wagent_framework-2.0.0a2/tests/test_doctor.py +11 -0
  12. wagent_framework-2.0.0a2/tests/test_evaluation.py +203 -0
  13. wagent_framework-2.0.0a2/tests/test_http_provider_templates.py +418 -0
  14. wagent_framework-2.0.0a2/tests/test_kernel_events.py +86 -0
  15. wagent_framework-2.0.0a2/tests/test_kernel_loading.py +70 -0
  16. wagent_framework-2.0.0a2/tests/test_kernel_plugins.py +169 -0
  17. wagent_framework-2.0.0a2/tests/test_kernel_registry.py +105 -0
  18. wagent_framework-2.0.0a2/tests/test_legacy_compat.py +111 -0
  19. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/tests/test_lifecycle.py +57 -2
  20. wagent_framework-2.0.0a2/tests/test_local_runtime.py +430 -0
  21. wagent_framework-2.0.0a2/tests/test_mcp_client.py +317 -0
  22. wagent_framework-2.0.0a2/tests/test_model_invocation.py +364 -0
  23. wagent_framework-2.0.0a2/tests/test_model_probing.py +259 -0
  24. wagent_framework-2.0.0a2/tests/test_model_routing.py +145 -0
  25. wagent_framework-2.0.0a2/tests/test_model_testing.py +139 -0
  26. wagent_framework-2.0.0a2/tests/test_model_types.py +97 -0
  27. wagent_framework-2.0.0a2/tests/test_observability.py +29 -0
  28. wagent_framework-2.0.0a2/tests/test_openai_compatible_provider.py +342 -0
  29. wagent_framework-2.0.0a2/tests/test_package_integrity.py +16 -0
  30. wagent_framework-2.0.0a2/tests/test_pricing.py +71 -0
  31. wagent_framework-2.0.0a2/tests/test_react_agent.py +785 -0
  32. wagent_framework-2.0.0a2/tests/test_sandbox.py +256 -0
  33. wagent_framework-2.0.0a2/tests/test_sandbox_runtime.py +302 -0
  34. wagent_framework-2.0.0a2/tests/test_sessions.py +163 -0
  35. wagent_framework-2.0.0a2/tests/test_timeout.py +43 -0
  36. wagent_framework-2.0.0a2/tests/test_tool_adapters.py +273 -0
  37. wagent_framework-2.0.0a2/tests/test_tool_loading.py +41 -0
  38. wagent_framework-2.0.0a2/tests/test_tool_runtime.py +162 -0
  39. wagent_framework-2.0.0a2/tests/test_tui.py +265 -0
  40. wagent_framework-2.0.0a2/tests/test_workflow_adapters.py +156 -0
  41. wagent_framework-2.0.0a2/tests/test_workflow_engine.py +322 -0
  42. wagent_framework-2.0.0a2/w_agent/__init__.py +795 -0
  43. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/__main__.py +13 -4
  44. wagent_framework-2.0.0a2/w_agent/agents/__init__.py +61 -0
  45. wagent_framework-2.0.0a2/w_agent/agents/persistence.py +687 -0
  46. wagent_framework-2.0.0a2/w_agent/agents/react.py +1041 -0
  47. wagent_framework-2.0.0a2/w_agent/agents/templates.py +93 -0
  48. wagent_framework-2.0.0a2/w_agent/agents/types.py +345 -0
  49. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/aop/proxy_factory.py +17 -17
  50. wagent_framework-2.0.0a2/w_agent/cli.py +1123 -0
  51. wagent_framework-2.0.0a2/w_agent/compat.py +87 -0
  52. wagent_framework-2.0.0a2/w_agent/compositions.py +348 -0
  53. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/config/dynamic_config.py +6 -2
  54. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/container/bean_factory.py +250 -131
  55. wagent_framework-2.0.0a2/w_agent/core/decorators.py +245 -0
  56. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/core/doctor.py +26 -19
  57. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/deployment/fastapi_depends.py +9 -7
  58. wagent_framework-2.0.0a2/w_agent/evaluation.py +430 -0
  59. wagent_framework-2.0.0a2/w_agent/kernel/__init__.py +73 -0
  60. wagent_framework-2.0.0a2/w_agent/kernel/events.py +124 -0
  61. wagent_framework-2.0.0a2/w_agent/kernel/exceptions.py +33 -0
  62. wagent_framework-2.0.0a2/w_agent/kernel/loading.py +81 -0
  63. wagent_framework-2.0.0a2/w_agent/kernel/plugins.py +518 -0
  64. wagent_framework-2.0.0a2/w_agent/kernel/registry.py +240 -0
  65. wagent_framework-2.0.0a2/w_agent/kernel/scope.py +93 -0
  66. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/lifecycle/graceful_shutdown.py +6 -3
  67. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/lifecycle/manager.py +38 -37
  68. wagent_framework-2.0.0a2/w_agent/local_runtime.py +608 -0
  69. wagent_framework-2.0.0a2/w_agent/models/__init__.py +226 -0
  70. wagent_framework-2.0.0a2/w_agent/models/errors.py +38 -0
  71. wagent_framework-2.0.0a2/w_agent/models/http_provider.py +497 -0
  72. wagent_framework-2.0.0a2/w_agent/models/invocation.py +583 -0
  73. wagent_framework-2.0.0a2/w_agent/models/native_mappings.py +948 -0
  74. wagent_framework-2.0.0a2/w_agent/models/openai_compatible.py +767 -0
  75. wagent_framework-2.0.0a2/w_agent/models/pricing.py +198 -0
  76. wagent_framework-2.0.0a2/w_agent/models/probing.py +682 -0
  77. wagent_framework-2.0.0a2/w_agent/models/provider.py +123 -0
  78. wagent_framework-2.0.0a2/w_agent/models/routing.py +408 -0
  79. wagent_framework-2.0.0a2/w_agent/models/templates.py +432 -0
  80. wagent_framework-2.0.0a2/w_agent/models/types.py +395 -0
  81. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/observability/logging.py +44 -31
  82. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/observability/metrics.py +37 -23
  83. wagent_framework-2.0.0a2/w_agent/resilience/bulkhead.py +52 -0
  84. wagent_framework-2.0.0a2/w_agent/resilience/timeout.py +56 -0
  85. wagent_framework-2.0.0a2/w_agent/sandbox/__init__.py +46 -0
  86. wagent_framework-2.0.0a2/w_agent/sandbox/docker.py +253 -0
  87. wagent_framework-2.0.0a2/w_agent/sandbox/process.py +149 -0
  88. wagent_framework-2.0.0a2/w_agent/sandbox/registry.py +64 -0
  89. wagent_framework-2.0.0a2/w_agent/sandbox/types.py +142 -0
  90. wagent_framework-2.0.0a2/w_agent/sandbox/unsafe_local.py +130 -0
  91. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/scanner/cache.py +6 -6
  92. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/scanner/parallel_scanner.py +31 -9
  93. wagent_framework-2.0.0a2/w_agent/sessions.py +564 -0
  94. wagent_framework-2.0.0a2/w_agent/skills/sandbox/nsjail_sandbox.py +174 -0
  95. wagent_framework-2.0.0a2/w_agent/skills/sandbox/wasm_sandbox.py +259 -0
  96. wagent_framework-2.0.0a2/w_agent/testing/__init__.py +21 -0
  97. wagent_framework-2.0.0a2/w_agent/testing/model_provider.py +570 -0
  98. wagent_framework-2.0.0a2/w_agent/tools/__init__.py +139 -0
  99. wagent_framework-2.0.0a2/w_agent/tools/command_adapter.py +168 -0
  100. wagent_framework-2.0.0a2/w_agent/tools/execution.py +319 -0
  101. wagent_framework-2.0.0a2/w_agent/tools/http_adapter.py +217 -0
  102. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/tools/langchain_adapter.py +122 -122
  103. wagent_framework-2.0.0a2/w_agent/tools/loading.py +56 -0
  104. wagent_framework-2.0.0a2/w_agent/tools/mcp_adapter.py +135 -0
  105. wagent_framework-2.0.0a2/w_agent/tools/mcp_client.py +870 -0
  106. wagent_framework-2.0.0a2/w_agent/tools/policies.py +97 -0
  107. wagent_framework-2.0.0a2/w_agent/tools/python.py +94 -0
  108. wagent_framework-2.0.0a2/w_agent/tools/registry.py +101 -0
  109. wagent_framework-2.0.0a2/w_agent/tools/sandbox_adapter.py +62 -0
  110. wagent_framework-2.0.0a2/w_agent/tools/types.py +166 -0
  111. wagent_framework-2.0.0a2/w_agent/tui.py +545 -0
  112. wagent_framework-2.0.0a2/w_agent/workflows/__init__.py +76 -0
  113. wagent_framework-2.0.0a2/w_agent/workflows/adapters.py +252 -0
  114. wagent_framework-2.0.0a2/w_agent/workflows/engine.py +441 -0
  115. wagent_framework-2.0.0a2/w_agent/workflows/persistence.py +363 -0
  116. wagent_framework-2.0.0a2/w_agent/workflows/registry.py +73 -0
  117. wagent_framework-2.0.0a2/w_agent/workflows/types.py +304 -0
  118. wagent_framework-2.0.0a2/wagent_framework.egg-info/PKG-INFO +262 -0
  119. wagent_framework-2.0.0a2/wagent_framework.egg-info/SOURCES.txt +160 -0
  120. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/wagent_framework.egg-info/entry_points.txt +1 -0
  121. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/wagent_framework.egg-info/requires.txt +16 -1
  122. wagent_framework-1.5.2/PKG-INFO +0 -716
  123. wagent_framework-1.5.2/README.md +0 -656
  124. wagent_framework-1.5.2/tests/test_container.py +0 -109
  125. wagent_framework-1.5.2/tests/test_sandbox.py +0 -68
  126. wagent_framework-1.5.2/w_agent/__init__.py +0 -85
  127. wagent_framework-1.5.2/w_agent/cli.py +0 -108
  128. wagent_framework-1.5.2/w_agent/core/decorators.py +0 -138
  129. wagent_framework-1.5.2/w_agent/resilience/bulkhead.py +0 -92
  130. wagent_framework-1.5.2/w_agent/resilience/timeout.py +0 -17
  131. wagent_framework-1.5.2/w_agent/skills/sandbox/nsjail_sandbox.py +0 -174
  132. wagent_framework-1.5.2/w_agent/skills/sandbox/wasm_sandbox.py +0 -242
  133. wagent_framework-1.5.2/w_agent/testing/__init__.py +0 -0
  134. wagent_framework-1.5.2/w_agent/tools/__init__.py +0 -0
  135. wagent_framework-1.5.2/wagent_framework.egg-info/PKG-INFO +0 -716
  136. wagent_framework-1.5.2/wagent_framework.egg-info/SOURCES.txt +0 -72
  137. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/LICENSE +0 -0
  138. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/setup.cfg +0 -0
  139. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/tests/test.py +0 -0
  140. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/tests/test_config.py +0 -0
  141. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/tests/test_distributed_lock.py +0 -0
  142. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/tests/test_event_bus.py +0 -0
  143. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/tests/test_scanner.py +0 -0
  144. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/aop/__init__.py +0 -0
  145. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/aop/aspects.py +0 -0
  146. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/aop/joinpoint.py +0 -0
  147. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/aop/pointcut.py +0 -0
  148. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/config/__init__.py +0 -0
  149. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/container/__init__.py +0 -0
  150. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/container/reflection_cache.py +0 -0
  151. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/core/__init__.py +0 -0
  152. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/core/agent.py +0 -0
  153. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/core/event_bus.py +0 -0
  154. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/deployment/__init__.py +0 -0
  155. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/distributed/__init__.py +0 -0
  156. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/distributed/lock.py +0 -0
  157. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/distributed/lock_pool.py +0 -0
  158. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/exceptions/__init__.py +0 -0
  159. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/exceptions/framework_errors.py +0 -0
  160. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/lifecycle/__init__.py +0 -0
  161. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/lifecycle/order.py +0 -0
  162. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/migration/__init__.py +0 -0
  163. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/migration/migrate_previous.py +0 -0
  164. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/observability/__init__.py +0 -0
  165. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/observability/health.py +0 -0
  166. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/observability/tracing.py +0 -0
  167. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/resilience/__init__.py +0 -0
  168. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/scanner/__init__.py +0 -0
  169. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/security/__init__.py +0 -0
  170. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/security/mcp_auth.py +0 -0
  171. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/skills/__init__.py +0 -0
  172. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/skills/sandbox/__init__.py +0 -0
  173. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/skills/signature.py +0 -0
  174. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/skills/skill.py +0 -0
  175. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/w_agent/testing/mock_utils.py +0 -0
  176. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/wagent_framework.egg-info/dependency_links.txt +0 -0
  177. {wagent_framework-1.5.2 → wagent_framework-2.0.0a2}/wagent_framework.egg-info/top_level.txt +0 -0
@@ -0,0 +1,262 @@
1
+ Metadata-Version: 2.4
2
+ Name: wagent-framework
3
+ Version: 2.0.0a2
4
+ Summary: Open, composable Python framework for building agents
5
+ Home-page: https://github.com/LuckyStar2456/W-Agent-FrameWork
6
+ Author: LuckyStar2456
7
+ Author-email: lucky_star_2456@example.com
8
+ License: MIT
9
+ Project-URL: Bug Reports, https://github.com/LuckyStar2456/W-Agent-FrameWork/issues
10
+ Project-URL: Source, https://github.com/LuckyStar2456/W-Agent-FrameWork
11
+ Keywords: agent framework AOP IOC sandbox
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: pydantic
24
+ Requires-Dist: structlog
25
+ Requires-Dist: cryptography
26
+ Requires-Dist: msgpack
27
+ Requires-Dist: zstandard
28
+ Requires-Dist: pyjwt
29
+ Requires-Dist: asgiref
30
+ Requires-Dist: redis
31
+ Requires-Dist: packaging>=23
32
+ Requires-Dist: pyyaml>=6
33
+ Requires-Dist: typer<1,>=0.12
34
+ Requires-Dist: rich<15,>=13
35
+ Provides-Extra: fastapi
36
+ Requires-Dist: fastapi; extra == "fastapi"
37
+ Requires-Dist: uvicorn; extra == "fastapi"
38
+ Provides-Extra: langchain
39
+ Requires-Dist: langchain; extra == "langchain"
40
+ Provides-Extra: models
41
+ Requires-Dist: httpx<1,>=0.27; extra == "models"
42
+ Provides-Extra: mcp
43
+ Requires-Dist: httpx<1,>=0.27; extra == "mcp"
44
+ Provides-Extra: tui
45
+ Requires-Dist: textual<9,>=0.70; extra == "tui"
46
+ Provides-Extra: wasm
47
+ Requires-Dist: wasmer-sdk<0.2,>=0.1.2; platform_system != "Windows" and extra == "wasm"
48
+ Provides-Extra: opentelemetry
49
+ Requires-Dist: opentelemetry-api; extra == "opentelemetry"
50
+ Requires-Dist: opentelemetry-sdk; extra == "opentelemetry"
51
+ Requires-Dist: opentelemetry-exporter-otlp; extra == "opentelemetry"
52
+ Provides-Extra: testing
53
+ Requires-Dist: pytest; extra == "testing"
54
+ Requires-Dist: pytest-asyncio; extra == "testing"
55
+ Dynamic: author
56
+ Dynamic: author-email
57
+ Dynamic: classifier
58
+ Dynamic: description
59
+ Dynamic: description-content-type
60
+ Dynamic: home-page
61
+ Dynamic: keywords
62
+ Dynamic: license
63
+ Dynamic: license-file
64
+ Dynamic: project-url
65
+ Dynamic: provides-extra
66
+ Dynamic: requires-dist
67
+ Dynamic: requires-python
68
+ Dynamic: summary
69
+
70
+ # W-Agent
71
+
72
+ [English](./README_EN.md) | 简体中文
73
+
74
+ W-Agent 是一个面向本地开发者的 Python 开源 Agent 开发框架。它的目标不是提供托管平台或固定 Harness,而是提供稳定、可扩展的协议与可自由装配的模块,让开发者能够替换模型、路由、Agent Loop、Workflow、工具、状态、沙箱和界面实现。
75
+
76
+ 当前稳定发布版本是 `1.5.2`,最新 Alpha 为 `2.0.0a2`。1.x 工程底座继续保留,微内核、模型、工具、单 Agent 与本地 Workflow 基础已经实现,其余下一代能力按路线图分阶段交付。文档使用明确状态标记,避免把规划能力描述为现有能力。
77
+
78
+ ## 状态标记
79
+
80
+ | 标记 | 含义 |
81
+ |---|---|
82
+ | `Implemented` | 源码已经存在,并有相应测试或可执行入口 |
83
+ | `Planned` | 已决定实现,已进入明确路线图 |
84
+ | `Reserved` | 协议或扩展点会保留,但尚未承诺实现版本 |
85
+ | `Experimental` | 可以试用,但接口与行为可能变化 |
86
+ | `Deprecated` | 仅为迁移保留,不再扩展 |
87
+
88
+ ## 项目定位
89
+
90
+ W-Agent 遵循以下原则:
91
+
92
+ - 核心协议稳定且可扩展,具体策略全部可替换。
93
+ - 内置实现只使用公开扩展接口,不享有私有能力。
94
+ - 显式 Python 装配、装饰器、配置文件和 Python entry point 最终进入同一个注册表。
95
+ - Agent Loop 与 Workflow 互通但不强行合并。
96
+ - 本地开发优先,不内置租户、计费或托管控制面。
97
+ - 默认执行不可信代码时使用沙箱;宿主机执行必须由用户明确授权。
98
+ - 已实现、计划实现和仅保留设计的能力必须在文档中区分。
99
+
100
+ ## 当前能力
101
+
102
+ 以下能力在 1.5.2 源码中为 `Implemented`:
103
+
104
+ - `BaseAgent.arun()` 基础抽象。
105
+ - IOC 容器、组件扫描、生命周期与依赖注入。
106
+ - AOP、重试、断路器、超时和舱壁隔离。
107
+ - 动态配置、事件总线、健康检查、日志、指标和链路追踪。
108
+ - Wasm 与 nsjail 技能沙箱,后端不可用时失败关闭。
109
+ - Skill 加载、签名校验、MCP JWT 认证、Redis 分布式锁。
110
+ - LangChain 工具适配、FastAPI 示例集成和测试辅助设施。
111
+
112
+ 以下 Phase 1 能力在当前 `2.0.0a2` 源码中为 `Implemented`:
113
+
114
+ - `PluginSpec`、装饰器、YAML 引用与 Python entry point 发现。
115
+ - 统一、版本感知、分作用域的能力注册表与不可变快照。
116
+ - 插件依赖解析、生命周期、失败回滚、级联卸载和可撤销注册。
117
+ - `Application → Workspace → Session → Agent → Run → Step` 作用域。
118
+ - `publish`、`first`、`serial` 和 `pipeline` 事件模式。
119
+
120
+ 以下 Phase 2A 能力在当前源码中也为 `Implemented`:
121
+
122
+ - Provider 中立的消息、能力、请求、响应和严格流事件协议。
123
+ - 统一 `ModelRegistry`、可替换 `ModelProvider` 和协作式取消令牌。
124
+ - 可解释的 Python 加权路由与安全 YAML 路由规则。
125
+ - L1 端点可达性嗅探、L2/L3 Provider 检查、显式授权的 L4/L5 主动探测、缓存和周期调度器。
126
+ - 严格配置化 Provider 的独立无副作用装配,以及 CLI/TUI 安全目录检查与显式授权主动生成探测。
127
+ - 可替换传输的 OpenAI-compatible Chat Completions Provider,适用于声明兼容接口的本地或远程服务。
128
+ - 可插拔的通用 HTTP 请求映射层与 JSON/SSE/NDJSON 传输。
129
+ - Anthropic、Gemini、Ollama、Qwen 原生模板,以及 DeepSeek、GLM、Qwen-compatible、Turbo AI/SIAM.AI 模板注册表。
130
+ - 同时支持完整收集和逐事件透传的 `ModelExecutor`;默认单次调用,可显式启用有界重试/故障转移,并记录不含 Prompt 的逐尝试 Token/失败审计。
131
+ - 注册即安全探测的 `ModelRegistrationProbeService` 与外部路由健康桥接;直接调用 `ModelRegistry.register()` 仍保持无副作用。
132
+ - 工具 Definition/Binding/Registry 分层、Python/HTTP/无 Shell 命令模板、MCP 绑定与 2026-07-28 stdio/Streamable HTTP 客户端、参数校验、权限/逐调用审批、超时/取消和 Prompt-free 审计。
133
+ - 可替换 `AgentLoop` 协议与有界单 Agent `ReactAgentLoop`,覆盖模型→工具→结果→模型闭环、严格 Token 预算、JSONL RunEvent/尝试账本记录和审批断点恢复。
134
+ - 应用提供的版本化价格表、普通/缓存输入与输出费用计量、失败关闭的 Run 费用预算,以及 Session/Checkpoint/评测费用可见性。
135
+ - 统一 `WorkflowRegistry`、可替换 `WorkflowEngineProtocol` 与 `LocalWorkflowEngine`,支持静态 DAG、状态图、Python 入口、节点事件、取消,以及内存/JSONL 节点边界暂停恢复。
136
+ - 统一 `SandboxProvider`/`SandboxRegistry`、Docker/OCI 生命周期后端、显式运行时授权的 `UnsafeLocalSandboxProvider`,以及受工具策略保护的 `sandbox_command_tool()`。
137
+ - Agent/Workflow 双向适配器,以及可完全覆盖的客服/RAG 与编码 Agent 模板。
138
+ - `CompositionManifest` 的确定性编码、安全预览,以及冲突安全的本地版本和别名管理。
139
+ - 本地 Session 创建/列表/归档、JSON 持久化、跨 Run 文本上下文与审批恢复协调。
140
+ - 严格本地 JSON 装配的文本 Agent CLI/TUI 运行入口,使用环境变量凭据引用、逐次调用确认、可见 Token/费用预算与计量。
141
+ - 确定性脚本化 Model Provider、显式授权的 JSONL 录制/顺序回放,以及本地评测运行器与脱敏 JSON 报告。
142
+
143
+ 当前 `BaseAgent` 仍是简单的 1.x 抽象;`LegacyAgentAdapter` 已能把它严格桥接为文本 Workflow 节点,新的 ReAct Runtime 独立提供。专用 OpenAI Responses 与 vLLM 差异适配、模型跨流恢复、多模态/工具事件通用回放、并行或嵌套 Workflow、装配依赖安装/加载确认和完整交互 TUI 仍为 `Planned`,不能当作现成功能使用。Docker 后端已有模拟 CLI 生命周期测试,但不代表当前机器已安装或启动 Docker;厂商模板经过模拟传输测试,也不代表所有远程型号已经在线验证。
144
+
145
+ ## 下一代模块图
146
+
147
+ ```text
148
+ 应用与模板 客服模板 / 编码模板 / 用户自定义装配
149
+ 运行时 Agent Loop / Workflow / Session / Checkpoint
150
+ 能力 Models / Router / Tools / RAG / Memory / Sandbox
151
+ 微内核 Plugin / Registry / Lifecycle / Scope / Events
152
+ 基础设施 Storage / Telemetry / CLI / TUI / Evaluation
153
+ ```
154
+
155
+ 下一代 API 直接从 `w_agent` 导出,不引入 `w_agent.v2` 命名空间。已实现的最小兼容层保留必要的 1.x Agent 复用路径。
156
+
157
+ ## 安装现有版本
158
+
159
+ ```bash
160
+ pip install wagent-framework
161
+ ```
162
+
163
+ 安装最新 Alpha:
164
+
165
+ ```bash
166
+ pip install --pre wagent-framework==2.0.0a2
167
+ ```
168
+
169
+ 可选依赖:
170
+
171
+ ```bash
172
+ pip install "wagent-framework[fastapi,langchain,opentelemetry]"
173
+ pip install "wagent-framework[models]"
174
+ pip install "wagent-framework[wasm]"
175
+ pip install "wagent-framework[tui]"
176
+ ```
177
+
178
+ PyPI 1.x 支持 Python 3.9+;`2.0.0a2` 与后续 2.x Alpha 要求 Python 3.11+。
179
+
180
+ ## 1.x 最小示例
181
+
182
+ ```python
183
+ import asyncio
184
+
185
+ from w_agent import AgentComponent, BaseAgent, BeanFactory
186
+
187
+
188
+ @AgentComponent(name="hello_agent")
189
+ class HelloAgent(BaseAgent):
190
+ async def arun(self, prompt: str) -> str:
191
+ return f"Hello, {prompt}!"
192
+
193
+
194
+ async def main() -> None:
195
+ factory = BeanFactory()
196
+ factory.register_bean("hello_agent", HelloAgent())
197
+ agent = await factory.get_bean("hello_agent")
198
+ print(await agent.arun("W-Agent"))
199
+
200
+
201
+ asyncio.run(main())
202
+ ```
203
+
204
+ 这段代码只展示 1.x 兼容用法,不会自动接入新的 ReAct、模型或工具运行时。
205
+
206
+ ## 本地开发体验
207
+
208
+ 当前源码已提供:
209
+
210
+ ```text
211
+ wagent init
212
+ wagent profile list
213
+ wagent probe <endpoint>
214
+ wagent provider-probe --mode safe|active|capability [--confirm-active-probe]
215
+ wagent doctor
216
+ wagent tui
217
+ wagent composition export
218
+ wagent composition inspect|save|list
219
+ wagent session create|list|show|archive|unarchive
220
+ wagent run "hello" --confirm-model-call --json
221
+ wagent evaluate cases.json --confirm-model-call --report report.json
222
+ ```
223
+
224
+ CLI 和 TUI 只调用公开 Python API。当前 CLI/TUI 基础标记为 `Experimental`:已覆盖初始化、模板列表、安全/主动端点探测、装配管理/离线预览、本地 Session 生命周期、需逐次确认的配置化 Agent 运行与 Token 汇总、Agent Checkpoint 脱敏列表,以及 CLI 的 Catalog 工具选择、独立代码加载确认、权限授予、精确 Call ID 审批恢复和 CLI/TUI 隐私安全本地评测;TUI 工具批准执行、通用插件操作、Workflow Checkpoint 汇总和实时事件查看仍为 `Planned`。
225
+
226
+ ## 工程装配分享
227
+
228
+ `Implemented`:开发者可以给框架装配命名和版本化,导出为可复制编码,并在无网络、无导入、无执行的阶段完成校验和风险预览。本地 Store 支持多版本与别名且拒绝静默覆盖冲突内容。依赖安装和插件加载确认仍为 `Planned`。
229
+
230
+ 装配编码只携带可移植清单,不携带密钥,不默认打包任意源码,也不会在导入时自动执行不可信插件。详细设计见[工程装配分享](./docs/project-sharing.md)。
231
+
232
+ ## 文档
233
+
234
+ - [文档索引](./docs/README.md)
235
+ - [架构设计](./docs/architecture.md)
236
+ - [路线图与能力状态](./docs/roadmap.md)
237
+ - [使用指南](./docs/guide.md)
238
+ - [开发者指南](./docs/developer.md)
239
+ - [API 状态与规划](./docs/api.md)
240
+ - [插件系统](./docs/plugin-system.md)
241
+ - [模型、路由与接口探测](./docs/model-routing.md)
242
+ - [HTTP Provider 与厂商模板](./docs/provider-templates.md)
243
+ - [工具注册、策略与执行](./docs/tools.md)
244
+ - [Agent Runtime 与 ReAct Loop](./docs/agents.md)
245
+ - [Session 生命周期与跨 Run 上下文](./docs/sessions.md)
246
+ - [本地配置化 Agent Runtime](./docs/local-runtime.md)
247
+ - [Workflow 与节点恢复](./docs/workflows.md)
248
+ - [沙箱与本地执行](./docs/sandbox.md)
249
+ - [CLI 与 TUI](./docs/tui.md)
250
+ - [本地测试、模型回放与评测](./docs/testing-evaluation.md)
251
+ - [1.x 迁移](./docs/migration-1x.md)
252
+
253
+ ## 明确不做
254
+
255
+ - 不提供 W-Agent 托管平台或云控制面。
256
+ - 首版不内置租户、组织、计费和 SaaS 管理系统。
257
+ - 不把某一种 ReAct、Workflow 或模型协议写死为唯一实现。
258
+ - 不在未经确认的情况下自动安装、升级或执行第三方插件。
259
+
260
+ ## 许可证
261
+
262
+ 本项目采用 [MIT 许可证](./LICENSE)。
@@ -0,0 +1,193 @@
1
+ # W-Agent
2
+
3
+ [English](./README_EN.md) | 简体中文
4
+
5
+ W-Agent 是一个面向本地开发者的 Python 开源 Agent 开发框架。它的目标不是提供托管平台或固定 Harness,而是提供稳定、可扩展的协议与可自由装配的模块,让开发者能够替换模型、路由、Agent Loop、Workflow、工具、状态、沙箱和界面实现。
6
+
7
+ 当前稳定发布版本是 `1.5.2`,最新 Alpha 为 `2.0.0a2`。1.x 工程底座继续保留,微内核、模型、工具、单 Agent 与本地 Workflow 基础已经实现,其余下一代能力按路线图分阶段交付。文档使用明确状态标记,避免把规划能力描述为现有能力。
8
+
9
+ ## 状态标记
10
+
11
+ | 标记 | 含义 |
12
+ |---|---|
13
+ | `Implemented` | 源码已经存在,并有相应测试或可执行入口 |
14
+ | `Planned` | 已决定实现,已进入明确路线图 |
15
+ | `Reserved` | 协议或扩展点会保留,但尚未承诺实现版本 |
16
+ | `Experimental` | 可以试用,但接口与行为可能变化 |
17
+ | `Deprecated` | 仅为迁移保留,不再扩展 |
18
+
19
+ ## 项目定位
20
+
21
+ W-Agent 遵循以下原则:
22
+
23
+ - 核心协议稳定且可扩展,具体策略全部可替换。
24
+ - 内置实现只使用公开扩展接口,不享有私有能力。
25
+ - 显式 Python 装配、装饰器、配置文件和 Python entry point 最终进入同一个注册表。
26
+ - Agent Loop 与 Workflow 互通但不强行合并。
27
+ - 本地开发优先,不内置租户、计费或托管控制面。
28
+ - 默认执行不可信代码时使用沙箱;宿主机执行必须由用户明确授权。
29
+ - 已实现、计划实现和仅保留设计的能力必须在文档中区分。
30
+
31
+ ## 当前能力
32
+
33
+ 以下能力在 1.5.2 源码中为 `Implemented`:
34
+
35
+ - `BaseAgent.arun()` 基础抽象。
36
+ - IOC 容器、组件扫描、生命周期与依赖注入。
37
+ - AOP、重试、断路器、超时和舱壁隔离。
38
+ - 动态配置、事件总线、健康检查、日志、指标和链路追踪。
39
+ - Wasm 与 nsjail 技能沙箱,后端不可用时失败关闭。
40
+ - Skill 加载、签名校验、MCP JWT 认证、Redis 分布式锁。
41
+ - LangChain 工具适配、FastAPI 示例集成和测试辅助设施。
42
+
43
+ 以下 Phase 1 能力在当前 `2.0.0a2` 源码中为 `Implemented`:
44
+
45
+ - `PluginSpec`、装饰器、YAML 引用与 Python entry point 发现。
46
+ - 统一、版本感知、分作用域的能力注册表与不可变快照。
47
+ - 插件依赖解析、生命周期、失败回滚、级联卸载和可撤销注册。
48
+ - `Application → Workspace → Session → Agent → Run → Step` 作用域。
49
+ - `publish`、`first`、`serial` 和 `pipeline` 事件模式。
50
+
51
+ 以下 Phase 2A 能力在当前源码中也为 `Implemented`:
52
+
53
+ - Provider 中立的消息、能力、请求、响应和严格流事件协议。
54
+ - 统一 `ModelRegistry`、可替换 `ModelProvider` 和协作式取消令牌。
55
+ - 可解释的 Python 加权路由与安全 YAML 路由规则。
56
+ - L1 端点可达性嗅探、L2/L3 Provider 检查、显式授权的 L4/L5 主动探测、缓存和周期调度器。
57
+ - 严格配置化 Provider 的独立无副作用装配,以及 CLI/TUI 安全目录检查与显式授权主动生成探测。
58
+ - 可替换传输的 OpenAI-compatible Chat Completions Provider,适用于声明兼容接口的本地或远程服务。
59
+ - 可插拔的通用 HTTP 请求映射层与 JSON/SSE/NDJSON 传输。
60
+ - Anthropic、Gemini、Ollama、Qwen 原生模板,以及 DeepSeek、GLM、Qwen-compatible、Turbo AI/SIAM.AI 模板注册表。
61
+ - 同时支持完整收集和逐事件透传的 `ModelExecutor`;默认单次调用,可显式启用有界重试/故障转移,并记录不含 Prompt 的逐尝试 Token/失败审计。
62
+ - 注册即安全探测的 `ModelRegistrationProbeService` 与外部路由健康桥接;直接调用 `ModelRegistry.register()` 仍保持无副作用。
63
+ - 工具 Definition/Binding/Registry 分层、Python/HTTP/无 Shell 命令模板、MCP 绑定与 2026-07-28 stdio/Streamable HTTP 客户端、参数校验、权限/逐调用审批、超时/取消和 Prompt-free 审计。
64
+ - 可替换 `AgentLoop` 协议与有界单 Agent `ReactAgentLoop`,覆盖模型→工具→结果→模型闭环、严格 Token 预算、JSONL RunEvent/尝试账本记录和审批断点恢复。
65
+ - 应用提供的版本化价格表、普通/缓存输入与输出费用计量、失败关闭的 Run 费用预算,以及 Session/Checkpoint/评测费用可见性。
66
+ - 统一 `WorkflowRegistry`、可替换 `WorkflowEngineProtocol` 与 `LocalWorkflowEngine`,支持静态 DAG、状态图、Python 入口、节点事件、取消,以及内存/JSONL 节点边界暂停恢复。
67
+ - 统一 `SandboxProvider`/`SandboxRegistry`、Docker/OCI 生命周期后端、显式运行时授权的 `UnsafeLocalSandboxProvider`,以及受工具策略保护的 `sandbox_command_tool()`。
68
+ - Agent/Workflow 双向适配器,以及可完全覆盖的客服/RAG 与编码 Agent 模板。
69
+ - `CompositionManifest` 的确定性编码、安全预览,以及冲突安全的本地版本和别名管理。
70
+ - 本地 Session 创建/列表/归档、JSON 持久化、跨 Run 文本上下文与审批恢复协调。
71
+ - 严格本地 JSON 装配的文本 Agent CLI/TUI 运行入口,使用环境变量凭据引用、逐次调用确认、可见 Token/费用预算与计量。
72
+ - 确定性脚本化 Model Provider、显式授权的 JSONL 录制/顺序回放,以及本地评测运行器与脱敏 JSON 报告。
73
+
74
+ 当前 `BaseAgent` 仍是简单的 1.x 抽象;`LegacyAgentAdapter` 已能把它严格桥接为文本 Workflow 节点,新的 ReAct Runtime 独立提供。专用 OpenAI Responses 与 vLLM 差异适配、模型跨流恢复、多模态/工具事件通用回放、并行或嵌套 Workflow、装配依赖安装/加载确认和完整交互 TUI 仍为 `Planned`,不能当作现成功能使用。Docker 后端已有模拟 CLI 生命周期测试,但不代表当前机器已安装或启动 Docker;厂商模板经过模拟传输测试,也不代表所有远程型号已经在线验证。
75
+
76
+ ## 下一代模块图
77
+
78
+ ```text
79
+ 应用与模板 客服模板 / 编码模板 / 用户自定义装配
80
+ 运行时 Agent Loop / Workflow / Session / Checkpoint
81
+ 能力 Models / Router / Tools / RAG / Memory / Sandbox
82
+ 微内核 Plugin / Registry / Lifecycle / Scope / Events
83
+ 基础设施 Storage / Telemetry / CLI / TUI / Evaluation
84
+ ```
85
+
86
+ 下一代 API 直接从 `w_agent` 导出,不引入 `w_agent.v2` 命名空间。已实现的最小兼容层保留必要的 1.x Agent 复用路径。
87
+
88
+ ## 安装现有版本
89
+
90
+ ```bash
91
+ pip install wagent-framework
92
+ ```
93
+
94
+ 安装最新 Alpha:
95
+
96
+ ```bash
97
+ pip install --pre wagent-framework==2.0.0a2
98
+ ```
99
+
100
+ 可选依赖:
101
+
102
+ ```bash
103
+ pip install "wagent-framework[fastapi,langchain,opentelemetry]"
104
+ pip install "wagent-framework[models]"
105
+ pip install "wagent-framework[wasm]"
106
+ pip install "wagent-framework[tui]"
107
+ ```
108
+
109
+ PyPI 1.x 支持 Python 3.9+;`2.0.0a2` 与后续 2.x Alpha 要求 Python 3.11+。
110
+
111
+ ## 1.x 最小示例
112
+
113
+ ```python
114
+ import asyncio
115
+
116
+ from w_agent import AgentComponent, BaseAgent, BeanFactory
117
+
118
+
119
+ @AgentComponent(name="hello_agent")
120
+ class HelloAgent(BaseAgent):
121
+ async def arun(self, prompt: str) -> str:
122
+ return f"Hello, {prompt}!"
123
+
124
+
125
+ async def main() -> None:
126
+ factory = BeanFactory()
127
+ factory.register_bean("hello_agent", HelloAgent())
128
+ agent = await factory.get_bean("hello_agent")
129
+ print(await agent.arun("W-Agent"))
130
+
131
+
132
+ asyncio.run(main())
133
+ ```
134
+
135
+ 这段代码只展示 1.x 兼容用法,不会自动接入新的 ReAct、模型或工具运行时。
136
+
137
+ ## 本地开发体验
138
+
139
+ 当前源码已提供:
140
+
141
+ ```text
142
+ wagent init
143
+ wagent profile list
144
+ wagent probe <endpoint>
145
+ wagent provider-probe --mode safe|active|capability [--confirm-active-probe]
146
+ wagent doctor
147
+ wagent tui
148
+ wagent composition export
149
+ wagent composition inspect|save|list
150
+ wagent session create|list|show|archive|unarchive
151
+ wagent run "hello" --confirm-model-call --json
152
+ wagent evaluate cases.json --confirm-model-call --report report.json
153
+ ```
154
+
155
+ CLI 和 TUI 只调用公开 Python API。当前 CLI/TUI 基础标记为 `Experimental`:已覆盖初始化、模板列表、安全/主动端点探测、装配管理/离线预览、本地 Session 生命周期、需逐次确认的配置化 Agent 运行与 Token 汇总、Agent Checkpoint 脱敏列表,以及 CLI 的 Catalog 工具选择、独立代码加载确认、权限授予、精确 Call ID 审批恢复和 CLI/TUI 隐私安全本地评测;TUI 工具批准执行、通用插件操作、Workflow Checkpoint 汇总和实时事件查看仍为 `Planned`。
156
+
157
+ ## 工程装配分享
158
+
159
+ `Implemented`:开发者可以给框架装配命名和版本化,导出为可复制编码,并在无网络、无导入、无执行的阶段完成校验和风险预览。本地 Store 支持多版本与别名且拒绝静默覆盖冲突内容。依赖安装和插件加载确认仍为 `Planned`。
160
+
161
+ 装配编码只携带可移植清单,不携带密钥,不默认打包任意源码,也不会在导入时自动执行不可信插件。详细设计见[工程装配分享](./docs/project-sharing.md)。
162
+
163
+ ## 文档
164
+
165
+ - [文档索引](./docs/README.md)
166
+ - [架构设计](./docs/architecture.md)
167
+ - [路线图与能力状态](./docs/roadmap.md)
168
+ - [使用指南](./docs/guide.md)
169
+ - [开发者指南](./docs/developer.md)
170
+ - [API 状态与规划](./docs/api.md)
171
+ - [插件系统](./docs/plugin-system.md)
172
+ - [模型、路由与接口探测](./docs/model-routing.md)
173
+ - [HTTP Provider 与厂商模板](./docs/provider-templates.md)
174
+ - [工具注册、策略与执行](./docs/tools.md)
175
+ - [Agent Runtime 与 ReAct Loop](./docs/agents.md)
176
+ - [Session 生命周期与跨 Run 上下文](./docs/sessions.md)
177
+ - [本地配置化 Agent Runtime](./docs/local-runtime.md)
178
+ - [Workflow 与节点恢复](./docs/workflows.md)
179
+ - [沙箱与本地执行](./docs/sandbox.md)
180
+ - [CLI 与 TUI](./docs/tui.md)
181
+ - [本地测试、模型回放与评测](./docs/testing-evaluation.md)
182
+ - [1.x 迁移](./docs/migration-1x.md)
183
+
184
+ ## 明确不做
185
+
186
+ - 不提供 W-Agent 托管平台或云控制面。
187
+ - 首版不内置租户、组织、计费和 SaaS 管理系统。
188
+ - 不把某一种 ReAct、Workflow 或模型协议写死为唯一实现。
189
+ - 不在未经确认的情况下自动安装、升级或执行第三方插件。
190
+
191
+ ## 许可证
192
+
193
+ 本项目采用 [MIT 许可证](./LICENSE)。
@@ -3,13 +3,13 @@ import os
3
3
 
4
4
  # 读取README.md作为长描述
5
5
  here = os.path.abspath(os.path.dirname(__file__))
6
- with open(os.path.join(here, 'README.md'), 'r', encoding='utf-8') as f:
6
+ with open(os.path.join(here, "README.md"), "r", encoding="utf-8") as f:
7
7
  long_description = f.read()
8
8
 
9
9
  setup(
10
10
  name="wagent-framework",
11
- version="1.5.2",
12
- description="Python enterprise agent framework with AOP, IOC, and sandbox security",
11
+ version="2.0.0a2",
12
+ description="Open, composable Python framework for building agents",
13
13
  long_description=long_description,
14
14
  long_description_content_type="text/markdown",
15
15
  url="https://github.com/LuckyStar2456/W-Agent-FrameWork",
@@ -25,32 +25,43 @@ setup(
25
25
  "zstandard",
26
26
  "pyjwt",
27
27
  "asgiref",
28
- "redis"
28
+ "redis",
29
+ "packaging>=23",
30
+ "pyyaml>=6",
31
+ "typer>=0.12,<1",
32
+ "rich>=13,<15",
29
33
  ],
30
34
  extras_require={
31
35
  "fastapi": ["fastapi", "uvicorn"],
32
36
  "langchain": ["langchain"],
33
- "wasm": ["wasmer"],
34
- "opentelemetry": ["opentelemetry-api", "opentelemetry-sdk", "opentelemetry-exporter-otlp"],
35
- "testing": ["pytest", "pytest-asyncio"]
36
- },
37
- entry_points={
38
- "console_scripts": [
39
- "w-agent=w_agent.cli:main"
40
- ]
37
+ "models": ["httpx>=0.27,<1"],
38
+ "mcp": ["httpx>=0.27,<1"],
39
+ "tui": ["textual>=0.70,<9"],
40
+ "wasm": ["wasmer-sdk>=0.1.2,<0.2; platform_system != 'Windows'"],
41
+ "opentelemetry": [
42
+ "opentelemetry-api",
43
+ "opentelemetry-sdk",
44
+ "opentelemetry-exporter-otlp",
45
+ ],
46
+ "testing": ["pytest", "pytest-asyncio"],
41
47
  },
48
+ entry_points={
49
+ "console_scripts": [
50
+ "wagent=w_agent.cli:main",
51
+ "w-agent=w_agent.cli:main",
52
+ ]
53
+ },
42
54
  classifiers=[
43
- "Development Status :: 4 - Beta",
55
+ "Development Status :: 3 - Alpha",
44
56
  "Intended Audience :: Developers",
45
57
  "License :: OSI Approved :: MIT License",
46
- "Programming Language :: Python :: 3.9",
47
- "Programming Language :: Python :: 3.10",
48
58
  "Programming Language :: Python :: 3.11",
49
59
  "Programming Language :: Python :: 3.12",
60
+ "Programming Language :: Python :: 3.13",
50
61
  "Topic :: Software Development :: Libraries :: Application Frameworks",
51
- "Topic :: Software Development :: Libraries :: Python Modules"
62
+ "Topic :: Software Development :: Libraries :: Python Modules",
52
63
  ],
53
- python_requires=">=3.9",
64
+ python_requires=">=3.11",
54
65
  keywords="agent framework AOP IOC sandbox",
55
66
  project_urls={
56
67
  "Bug Reports": "https://github.com/LuckyStar2456/W-Agent-FrameWork/issues",
@@ -0,0 +1,38 @@
1
+ import pytest
2
+
3
+ from w_agent import (
4
+ CODING_AGENT_TEMPLATE,
5
+ CUSTOMER_SUPPORT_AGENT_TEMPLATE,
6
+ TokenBudget,
7
+ coding_agent,
8
+ customer_support_agent,
9
+ )
10
+
11
+
12
+ def test_customer_support_template_is_an_editable_definition():
13
+ definition = customer_support_agent(
14
+ name="my-support",
15
+ model="provider/model",
16
+ token_budget=TokenBudget(max_total_tokens=10_000),
17
+ )
18
+
19
+ assert definition.name == "my-support"
20
+ assert definition.model == "provider/model"
21
+ assert definition.max_steps == 8
22
+ assert definition.token_budget == TokenBudget(max_total_tokens=10_000)
23
+ assert "knowledge_search" in CUSTOMER_SUPPORT_AGENT_TEMPLATE.recommended_tools
24
+
25
+
26
+ def test_coding_template_does_not_grant_tools_or_local_execution():
27
+ definition = coding_agent(max_steps=3, system_prompt="custom")
28
+
29
+ assert definition.name == "coding"
30
+ assert definition.max_steps == 3
31
+ assert definition.system_prompt == "custom"
32
+ assert definition.extensions == {}
33
+ assert "sandbox_command" in CODING_AGENT_TEMPLATE.recommended_tools
34
+
35
+
36
+ def test_template_rejects_unknown_definition_fields():
37
+ with pytest.raises(TypeError):
38
+ coding_agent(unknown_option=True)