ErisPulse 2.3.9.dev1__tar.gz → 2.3.9.dev3__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 (118) hide show
  1. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/.gitignore +20 -1
  2. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/PKG-INFO +18 -6
  3. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/README.md +17 -5
  4. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/pyproject.toml +1 -1
  5. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/init.py +3 -3
  6. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/init.pyi +1 -1
  7. erispulse-2.3.9.dev3/src/ErisPulse/CLI/commands/uninstall.py +137 -0
  8. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/uninstall.pyi +7 -0
  9. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/command.py +1 -1
  10. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/command.pyi +2 -0
  11. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/message.py +1 -1
  12. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/message.pyi +2 -0
  13. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/meta.py +1 -1
  14. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/meta.pyi +2 -0
  15. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/notice.py +1 -1
  16. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/notice.pyi +2 -0
  17. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/request.py +1 -1
  18. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/request.pyi +2 -0
  19. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/adapter.py +1 -1
  20. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/adapter.pyi +2 -0
  21. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/config.py +1 -1
  22. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/config.pyi +2 -0
  23. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/lifecycle.py +1 -1
  24. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/lifecycle.pyi +2 -0
  25. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/logger.py +1 -1
  26. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/logger.pyi +2 -0
  27. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/module.py +1 -1
  28. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/module.pyi +2 -0
  29. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/router.py +1 -1
  30. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/router.pyi +2 -0
  31. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/storage.py +1 -1
  32. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/storage.pyi +2 -0
  33. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/sdk.py +29 -17
  34. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/sdk.pyi +22 -14
  35. erispulse-2.3.9.dev1/src/ErisPulse/CLI/commands/uninstall.py +0 -32
  36. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/LICENSE +0 -0
  37. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/__init__.py +0 -0
  38. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/__init__.pyi +0 -0
  39. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/base.py +0 -0
  40. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/base.pyi +0 -0
  41. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/cli.py +0 -0
  42. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/cli.pyi +0 -0
  43. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/__init__.py +0 -0
  44. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
  45. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/install.py +0 -0
  46. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/install.pyi +0 -0
  47. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/list.py +0 -0
  48. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/list.pyi +0 -0
  49. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
  50. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
  51. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/run.py +0 -0
  52. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/run.pyi +0 -0
  53. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/self_update.py +0 -0
  54. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/self_update.pyi +0 -0
  55. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
  56. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
  57. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/console.py +0 -0
  58. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/console.pyi +0 -0
  59. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/registry.py +0 -0
  60. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/registry.pyi +0 -0
  61. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/utils/__init__.py +0 -0
  62. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
  63. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/utils/package_manager.py +0 -0
  64. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/utils/package_manager.pyi +0 -0
  65. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/__init__.py +0 -0
  66. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/__init__.pyi +0 -0
  67. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/adapter.py +0 -0
  68. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/adapter.pyi +0 -0
  69. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/manager.py +0 -0
  70. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
  71. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/module.py +0 -0
  72. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/module.pyi +0 -0
  73. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/__init__.py +0 -0
  74. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
  75. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/base.py +0 -0
  76. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/base.pyi +0 -0
  77. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/session_type.py +0 -0
  78. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
  79. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/wrapper.py +0 -0
  80. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/wrapper.pyi +0 -0
  81. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/__init__.py +0 -0
  82. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/__init__.pyi +0 -0
  83. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/__init__.py +0 -0
  84. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/__init__.pyi +0 -0
  85. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/__main__.py +0 -0
  86. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/__main__.pyi +0 -0
  87. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/__init__.py +0 -0
  88. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/__init__.pyi +0 -0
  89. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/adapter.py +0 -0
  90. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/adapter.pyi +0 -0
  91. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/bases/__init__.py +0 -0
  92. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
  93. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/bases/finder.py +0 -0
  94. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/bases/finder.pyi +0 -0
  95. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/cli.py +0 -0
  96. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/cli.pyi +0 -0
  97. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/module.py +0 -0
  98. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/module.pyi +0 -0
  99. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/__init__.py +0 -0
  100. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/__init__.pyi +0 -0
  101. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/adapter.py +0 -0
  102. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/adapter.pyi +0 -0
  103. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/bases/__init__.py +0 -0
  104. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
  105. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/bases/loader.py +0 -0
  106. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
  107. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/module.py +0 -0
  108. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/module.pyi +0 -0
  109. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/strategy.py +0 -0
  110. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/strategy.pyi +0 -0
  111. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/__init__.py +0 -0
  112. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/__init__.pyi +0 -0
  113. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/cleanup.py +0 -0
  114. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/cleanup.pyi +0 -0
  115. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/exceptions.py +0 -0
  116. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/exceptions.pyi +0 -0
  117. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/frame_config.py +0 -0
  118. {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/frame_config.pyi +0 -0
@@ -205,4 +205,23 @@ cython_debug/
205
205
  bin
206
206
  include
207
207
  lib
208
- pyvenv.cfg
208
+ pyvenv.cfg
209
+
210
+ # i18n 翻译文档(自动生成)
211
+ # 已提交到版本控制以支持 CI/CD 和状态追踪
212
+ # docs/zh-TW/
213
+ # docs/en/
214
+ # docs/ja/
215
+ # docs/ko/
216
+ # docs/fr/
217
+ # docs/de/
218
+ # docs/es/
219
+ # docs/it/
220
+ # docs/ru/
221
+ # docs/ar/
222
+
223
+ # 翻译缓存(已提交到版本控制)
224
+ # .translate_cache/
225
+
226
+ # 但保留源中文文档
227
+ !docs/zh-CN/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse
3
- Version: 2.3.9.dev1
3
+ Version: 2.3.9.dev3
4
4
  Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
5
  Author-email: ErisDev <erisdev@88.com>
6
6
  Maintainer-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
@@ -58,6 +58,12 @@ Requires-Dist: pytest-xdist>=3.0.0; extra == 'test'
58
58
  Requires-Dist: pytest>=7.0.0; extra == 'test'
59
59
  Description-Content-Type: text/markdown
60
60
 
61
+ <div align="center">
62
+
63
+ [English](README.en.md) | [简体中文](README.md) | [繁體中文](README.zh-TW.md)
64
+
65
+ </div>
66
+
61
67
  <table>
62
68
  <tr>
63
69
  <td width="35%" valign="middle" align="center">
@@ -178,8 +184,8 @@ epsdk run main.py --reload
178
184
  </table>
179
185
 
180
186
  更多详细说明请参阅:
181
- - [快速开始指南](docs/quick-start.md)
182
- - [入门指南](docs/getting-started/)
187
+ - [快速开始指南](docs/zh-CN/quick-start.md)
188
+ - [入门指南](docs/zh-CN/getting-started/)
183
189
 
184
190
  ## 应用场景
185
191
 
@@ -200,10 +206,16 @@ epsdk run main.py --reload
200
206
  - [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) - 邮件收发处理
201
207
  - [沙箱](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) - 网页调试界面,无需接入实际平台
202
208
 
203
- 查看 [适配器详情介绍](docs/platform-guide/README.md)
209
+ 查看 [适配器详情介绍](docs/zh-CN/platform-guide/README.md)
204
210
 
205
211
  ## 文档资源
206
212
 
213
+ | 简体中文 | English | 繁體中文 |
214
+ |----------------|----------------|----------------|
215
+ | [文档入口](docs/zh-CN/README.md) | [Documentation](docs/en/README.md) | [文檔入口](docs/zh-TW/README.md) |
216
+
217
+ ## 外部资源
218
+
207
219
  | 平台 | 主站点 | 备用站点 |
208
220
  |------|--------|---------|
209
221
  | 文档 | [erisdev.com](https://www.erisdev.com/#docs) | [Cloudflare](https://erispulse.pages.dev/#docs) • [GitHub](https://erispulse.github.io/#docs) • [Netlify](https://erispulse.netlify.app/#docs) |
@@ -211,7 +223,7 @@ epsdk run main.py --reload
211
223
 
212
224
  ## 贡献指南
213
225
 
214
- 我们欢迎各种形式的贡献,包括但不限于:
226
+ ErisPulse 项目的健全性还需要您的一份力!我们欢迎各种形式的贡献,包括但不限于:
215
227
 
216
228
  1. **报告问题**
217
229
  在 [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues) 提交 bug 报告
@@ -220,7 +232,7 @@ epsdk run main.py --reload
220
232
  通过 [社区讨论](https://github.com/ErisPulse/ErisPulse/discussions) 提出新想法
221
233
 
222
234
  3. **代码贡献**
223
- 提交 Pull Request 前请阅读我们的 [代码风格](docs/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
235
+ 提交 Pull Request 前请阅读我们的 [代码风格](docs/zh-CN/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
224
236
 
225
237
  4. **文档改进**
226
238
  帮助完善文档和示例代码
@@ -1,3 +1,9 @@
1
+ <div align="center">
2
+
3
+ [English](README.en.md) | [简体中文](README.md) | [繁體中文](README.zh-TW.md)
4
+
5
+ </div>
6
+
1
7
  <table>
2
8
  <tr>
3
9
  <td width="35%" valign="middle" align="center">
@@ -118,8 +124,8 @@ epsdk run main.py --reload
118
124
  </table>
119
125
 
120
126
  更多详细说明请参阅:
121
- - [快速开始指南](docs/quick-start.md)
122
- - [入门指南](docs/getting-started/)
127
+ - [快速开始指南](docs/zh-CN/quick-start.md)
128
+ - [入门指南](docs/zh-CN/getting-started/)
123
129
 
124
130
  ## 应用场景
125
131
 
@@ -140,10 +146,16 @@ epsdk run main.py --reload
140
146
  - [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) - 邮件收发处理
141
147
  - [沙箱](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) - 网页调试界面,无需接入实际平台
142
148
 
143
- 查看 [适配器详情介绍](docs/platform-guide/README.md)
149
+ 查看 [适配器详情介绍](docs/zh-CN/platform-guide/README.md)
144
150
 
145
151
  ## 文档资源
146
152
 
153
+ | 简体中文 | English | 繁體中文 |
154
+ |----------------|----------------|----------------|
155
+ | [文档入口](docs/zh-CN/README.md) | [Documentation](docs/en/README.md) | [文檔入口](docs/zh-TW/README.md) |
156
+
157
+ ## 外部资源
158
+
147
159
  | 平台 | 主站点 | 备用站点 |
148
160
  |------|--------|---------|
149
161
  | 文档 | [erisdev.com](https://www.erisdev.com/#docs) | [Cloudflare](https://erispulse.pages.dev/#docs) • [GitHub](https://erispulse.github.io/#docs) • [Netlify](https://erispulse.netlify.app/#docs) |
@@ -151,7 +163,7 @@ epsdk run main.py --reload
151
163
 
152
164
  ## 贡献指南
153
165
 
154
- 我们欢迎各种形式的贡献,包括但不限于:
166
+ ErisPulse 项目的健全性还需要您的一份力!我们欢迎各种形式的贡献,包括但不限于:
155
167
 
156
168
  1. **报告问题**
157
169
  在 [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues) 提交 bug 报告
@@ -160,7 +172,7 @@ epsdk run main.py --reload
160
172
  通过 [社区讨论](https://github.com/ErisPulse/ErisPulse/discussions) 提出新想法
161
173
 
162
174
  3. **代码贡献**
163
- 提交 Pull Request 前请阅读我们的 [代码风格](docs/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
175
+ 提交 Pull Request 前请阅读我们的 [代码风格](docs/zh-CN/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
164
176
 
165
177
  4. **文档改进**
166
178
  帮助完善文档和示例代码
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ErisPulse"
7
- version = "2.3.9-dev.1"
7
+ version = "2.3.9-dev.3"
8
8
  description = "ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -177,7 +177,7 @@ class InitCommand(Command):
177
177
  "email": "邮件适配器"
178
178
  }
179
179
 
180
- def _configure_adapters_interactive_sync(self, project_path: str = None):
180
+ def _configure_adapters_interactive_sync(self, project_path: Path = None):
181
181
  """
182
182
  交互式配置适配器的同步版本
183
183
 
@@ -377,7 +377,7 @@ class InitCommand(Command):
377
377
 
378
378
  # 询问是否要配置适配器
379
379
  if Confirm.ask("\n[cyan]是否要配置适配器?[/cyan]", default=True):
380
- self._configure_adapters_interactive_sync(str(project_path))
380
+ self._configure_adapters_interactive_sync(project_path)
381
381
 
382
382
  # 保存配置
383
383
  config.force_save()
@@ -392,4 +392,4 @@ class InitCommand(Command):
392
392
 
393
393
  except Exception as e:
394
394
  console.print(f"[red]交互式初始化失败: {e}[/]")
395
- return False
395
+ return False
@@ -44,7 +44,7 @@ class InitCommand(Command):
44
44
  :return: 适配器名称到描述的映射
45
45
  """
46
46
  ...
47
- def _configure_adapters_interactive_sync(self: object, project_path: str = ...) -> ...:
47
+ def _configure_adapters_interactive_sync(self: object, project_path: Path = ...) -> ...:
48
48
  """
49
49
  交互式配置适配器的同步版本
50
50
 
@@ -0,0 +1,137 @@
1
+ """
2
+ Uninstall 命令实现
3
+
4
+ 支持卸载模块、适配器、CLI 扩展
5
+ """
6
+
7
+ import sys
8
+ from argparse import ArgumentParser
9
+
10
+ from rich.panel import Panel
11
+ from rich.prompt import Prompt
12
+ from rich.table import Table
13
+ from rich.box import SIMPLE
14
+
15
+ from ..utils import PackageManager
16
+ from ..console import console
17
+ from ..base import Command
18
+
19
+
20
+ class UninstallCommand(Command):
21
+
22
+ name = "uninstall"
23
+ description = "卸载模块/适配器包(不指定包名时进入交互式卸载)"
24
+
25
+ def __init__(self):
26
+ self.package_manager = PackageManager()
27
+
28
+ def add_arguments(self, parser: ArgumentParser):
29
+ parser.add_argument(
30
+ 'package',
31
+ nargs='*',
32
+ help='要卸载的包名(可指定多个)'
33
+ )
34
+
35
+ def execute(self, args):
36
+ if args.package:
37
+ # 直接卸载指定包
38
+ success = self.package_manager.uninstall_package(args.package)
39
+ if not success:
40
+ sys.exit(1)
41
+ else:
42
+ # 交互式卸载
43
+ self._interactive_uninstall()
44
+
45
+ def _interactive_uninstall(self):
46
+ console.print(Panel(
47
+ "[bold cyan]ErisPulse 卸载向导[/]\n"
48
+ "选择要卸载的包",
49
+ title="卸载向导",
50
+ border_style="cyan"
51
+ ))
52
+
53
+ # 获取已安装的包
54
+ installed = self.package_manager.get_installed_packages()
55
+
56
+ # 收集所有已安装的包
57
+ all_packages = []
58
+
59
+ # 添加适配器
60
+ for name, info in installed.get("adapters", {}).items():
61
+ all_packages.append({
62
+ "type": "适配器",
63
+ "name": name,
64
+ "package": info["package"],
65
+ "version": info["version"]
66
+ })
67
+
68
+ # 添加模块
69
+ for name, info in installed.get("modules", {}).items():
70
+ all_packages.append({
71
+ "type": "模块",
72
+ "name": name,
73
+ "package": info["package"],
74
+ "version": info["version"]
75
+ })
76
+
77
+ # 添加 CLI 扩展
78
+ for name, info in installed.get("cli_extensions", {}).items():
79
+ all_packages.append({
80
+ "type": "CLI",
81
+ "name": name,
82
+ "package": info["package"],
83
+ "version": info["version"]
84
+ })
85
+
86
+ if not all_packages:
87
+ console.print("[yellow]没有已安装的包[/]")
88
+ return
89
+
90
+ # 显示包列表
91
+ table = Table(box=SIMPLE)
92
+ table.add_column("序号", style="cyan")
93
+ table.add_column("类型", style="bold")
94
+ table.add_column("名称")
95
+ table.add_column("包名")
96
+ table.add_column("版本")
97
+
98
+ for i, pkg in enumerate(all_packages, 1):
99
+ table.add_row(
100
+ str(i),
101
+ pkg["type"],
102
+ pkg["name"],
103
+ pkg["package"],
104
+ pkg["version"]
105
+ )
106
+
107
+ console.print(table)
108
+
109
+ # 选择要卸载的包
110
+ selected = Prompt.ask(
111
+ "\n[cyan]请输入要卸载的包序号(多个用逗号分隔,如: 1,3)或按 q 退出:[/cyan]"
112
+ )
113
+
114
+ if selected.lower() == 'q':
115
+ console.print("[info]退出卸载向导[/]")
116
+ return
117
+
118
+ try:
119
+ indices = [int(idx.strip()) for idx in selected.split(",")]
120
+ selected_packages = []
121
+
122
+ for idx in indices:
123
+ if 1 <= idx <= len(all_packages):
124
+ pkg_info = all_packages[idx - 1]
125
+ selected_packages.append(pkg_info["package"])
126
+ console.print(f"[green]已选择: {pkg_info['name']} ({pkg_info['package']})[/]")
127
+ else:
128
+ console.print(f"[red]无效的序号: {idx}[/]")
129
+
130
+ if selected_packages:
131
+ # 卸载选中的包
132
+ success = self.package_manager.uninstall_package(selected_packages)
133
+ if not success:
134
+ sys.exit(1)
135
+
136
+ except ValueError:
137
+ console.print("[red]输入格式错误,请输入数字序号[/]")
@@ -12,7 +12,12 @@ Uninstall 命令实现
12
12
 
13
13
  import sys
14
14
  from argparse import ArgumentParser
15
+ from rich.panel import Panel
16
+ from rich.prompt import Prompt
17
+ from rich.table import Table
18
+ from rich.box import SIMPLE
15
19
  from ..utils import PackageManager
20
+ from ..console import console
16
21
  from ..base import Command
17
22
 
18
23
  class UninstallCommand(Command):
@@ -22,3 +27,5 @@ class UninstallCommand(Command):
22
27
  ...
23
28
  def execute(self: object, args: ...) -> ...:
24
29
  ...
30
+ def _interactive_uninstall(self: object) -> ...:
31
+ ...
@@ -558,4 +558,4 @@ class CommandHandler:
558
558
  help_lines.append(f" {self.prefix}{cmd_name} - {help_text}")
559
559
  return "\n".join(help_lines)
560
560
 
561
- command = CommandHandler()
561
+ command : CommandHandler = CommandHandler()
@@ -114,3 +114,5 @@ class CommandHandler:
114
114
  :return: 帮助信息字符串
115
115
  """
116
116
  ...
117
+
118
+ command: CommandHandler
@@ -132,4 +132,4 @@ class MessageHandler:
132
132
  """
133
133
  return self.handler._clear_handlers()
134
134
 
135
- message = MessageHandler()
135
+ message : MessageHandler = MessageHandler()
@@ -91,3 +91,5 @@ class MessageHandler:
91
91
  :return: 是否成功取消注册
92
92
  """
93
93
  ...
94
+
95
+ message: MessageHandler
@@ -124,4 +124,4 @@ class MetaHandler:
124
124
  """
125
125
  return self.handler._clear_handlers()
126
126
 
127
- meta = MetaHandler()
127
+ meta : MetaHandler = MetaHandler()
@@ -90,3 +90,5 @@ class MetaHandler:
90
90
  :return: 是否成功取消注册
91
91
  """
92
92
  ...
93
+
94
+ meta: MetaHandler
@@ -148,4 +148,4 @@ class NoticeHandler:
148
148
  """
149
149
  return self.handler._clear_handlers()
150
150
 
151
- notice = NoticeHandler()
151
+ notice : NoticeHandler = NoticeHandler()
@@ -106,3 +106,5 @@ class NoticeHandler:
106
106
  :return: 是否成功取消注册
107
107
  """
108
108
  ...
109
+
110
+ notice: NoticeHandler
@@ -100,4 +100,4 @@ class RequestHandler:
100
100
  """
101
101
  return self.handler._clear_handlers()
102
102
 
103
- request = RequestHandler()
103
+ request : RequestHandler = RequestHandler()
@@ -74,3 +74,5 @@ class RequestHandler:
74
74
  :return: 是否成功取消注册
75
75
  """
76
76
  ...
77
+
78
+ request: RequestHandler
@@ -771,7 +771,7 @@ class AdapterManager(ManagerBase):
771
771
  """
772
772
  return self.exists(platform) and self.is_enabled(platform)
773
773
 
774
- adapter = AdapterManager()
774
+ adapter : AdapterManager = AdapterManager()
775
775
 
776
776
  __all__ = [
777
777
  "adapter"
@@ -304,3 +304,5 @@ class AdapterManager(ManagerBase):
304
304
  :return: [bool] 平台是否存在且启用
305
305
  """
306
306
  ...
307
+
308
+ adapter: AdapterManager
@@ -258,7 +258,7 @@ class ConfigManager:
258
258
  self._dirty_keys.clear()
259
259
  self._load_config()
260
260
 
261
- config = ConfigManager()
261
+ config : ConfigManager = ConfigManager()
262
262
 
263
263
  __all__ = [
264
264
  "config"
@@ -81,3 +81,5 @@ class ConfigManager:
81
81
  重新从磁盘加载配置,丢弃所有未保存的更改
82
82
  """
83
83
  ...
84
+
85
+ config: ConfigManager
@@ -182,7 +182,7 @@ class LifecycleManager:
182
182
  except Exception as e:
183
183
  logger.error(f"生命周期事件处理器执行错误 {event}: {e}")
184
184
 
185
- lifecycle = LifecycleManager()
185
+ lifecycle : LifecycleManager = LifecycleManager()
186
186
 
187
187
  __all__ = [
188
188
  "LifecycleManager",
@@ -94,3 +94,5 @@ class LifecycleManager:
94
94
  :param event_data: 事件数据
95
95
  """
96
96
  ...
97
+
98
+ lifecycle: LifecycleManager
@@ -511,6 +511,6 @@ class LoggerChild:
511
511
  return self.get_child(name)
512
512
 
513
513
 
514
- logger = Logger()
514
+ logger : Logger = Logger()
515
515
 
516
516
  __all__ = ["logger"]
@@ -304,3 +304,5 @@ class LoggerChild:
304
304
  >>> nested_child.info("db message")
305
305
  """
306
306
  ...
307
+
308
+ logger: Logger
@@ -486,7 +486,7 @@ class ModuleManager(ManagerBase):
486
486
  """
487
487
  return self.exists(module_name) and self.is_enabled(module_name)
488
488
 
489
- module = ModuleManager()
489
+ module : ModuleManager = ModuleManager()
490
490
 
491
491
  __all__ = [
492
492
  "module"
@@ -214,3 +214,5 @@ class ModuleManager(ManagerBase):
214
214
  >>> if "MyModule" in module: ...
215
215
  """
216
216
  ...
217
+
218
+ module: ModuleManager
@@ -452,7 +452,7 @@ class RouterManager:
452
452
 
453
453
  return "\n".join(lines)
454
454
 
455
- router = RouterManager()
455
+ router : RouterManager = RouterManager()
456
456
 
457
457
  __all__ = [
458
458
  "router",
@@ -136,3 +136,5 @@ class RouterManager:
136
136
  str: 格式化后的URL
137
137
  """
138
138
  ...
139
+
140
+ router: RouterManager
@@ -547,7 +547,7 @@ class StorageManager:
547
547
  from .logger import logger
548
548
  logger.error(f"设置存储项 {key} 失败: {e}")
549
549
 
550
- storage = StorageManager()
550
+ storage : StorageManager = StorageManager()
551
551
 
552
552
  __all__ = [
553
553
  "storage"
@@ -207,3 +207,5 @@ class StorageManager:
207
207
  >>> storage.app_name = "MyApp"
208
208
  """
209
209
  ...
210
+
211
+ storage: StorageManager
@@ -11,15 +11,24 @@ example:
11
11
  {!--< /tips >!--}
12
12
  """
13
13
 
14
+ from __future__ import annotations
15
+
14
16
  import asyncio
15
17
  from pathlib import Path
16
- from typing import Any
18
+ from typing import TYPE_CHECKING
17
19
 
18
20
  # 导入核心模块
19
21
  from .Core import Event, lifecycle, logger
20
22
  from .Core import storage, env, config
21
23
  from .Core import adapter, AdapterFather, BaseAdapter, SendDSL
22
24
  from .Core import module, router, adapter_server
25
+ from .Core.lifecycle import LifecycleManager
26
+ from .Core.adapter import AdapterManager
27
+ from .Core.storage import StorageManager
28
+ from .Core.logger import Logger
29
+ from .Core.module import ModuleManager
30
+ from .Core.router import RouterManager
31
+ from .Core.config import ConfigManager
23
32
 
24
33
  # 导入懒加载模块类
25
34
  from .loaders.module import LazyModule
@@ -27,6 +36,9 @@ from .loaders.module import LazyModule
27
36
  from .loaders.adapter import AdapterLoader
28
37
  from .loaders.module import ModuleLoader
29
38
 
39
+ if TYPE_CHECKING:
40
+ from types import ModuleType
41
+
30
42
 
31
43
  class SDK:
32
44
  """
@@ -54,43 +66,43 @@ class SDK:
54
66
 
55
67
  # ==================== 核心模块属性 ====================
56
68
 
57
- Event: Any
69
+ Event: ModuleType
58
70
  """事件系统"""
59
71
 
60
- lifecycle: Any
72
+ lifecycle: LifecycleManager
61
73
  """生命周期管理器"""
62
74
 
63
- logger: Any
75
+ logger: Logger
64
76
  """日志管理器"""
65
77
 
66
- storage: Any
78
+ storage: StorageManager
67
79
  """存储管理器"""
68
80
 
69
- env: Any
81
+ env: StorageManager
70
82
  """存储管理器别名"""
71
83
 
72
- config: Any
84
+ config: ConfigManager
73
85
  """配置管理器"""
74
86
 
75
- adapter: Any
87
+ adapter: AdapterManager
76
88
  """适配器管理器"""
77
89
 
78
- AdapterFather: Any
90
+ AdapterFather: type[BaseAdapter]
79
91
  """适配器基类别名"""
80
92
 
81
- BaseAdapter: Any
93
+ BaseAdapter: type[BaseAdapter]
82
94
  """适配器基类"""
83
95
 
84
- SendDSL: Any
96
+ SendDSL: type[SendDSL]
85
97
  """DSL 发送接口基类"""
86
98
 
87
- module: Any
99
+ module: ModuleManager
88
100
  """模块管理器"""
89
101
 
90
- router: Any
102
+ router: RouterManager
91
103
  """路由管理器"""
92
104
 
93
- adapter_server: Any
105
+ adapter_server: RouterManager
94
106
  """路由管理器别名"""
95
107
 
96
108
  def __init__(self):
@@ -124,7 +136,7 @@ class SDK:
124
136
  self.adapter_server = adapter_server
125
137
 
126
138
  # 初始化协调器(在需要时创建)
127
- self._initializer: Any = None # type: ignore
139
+ self._initializer: SDK.Initializer | None = None
128
140
  self._initialized: bool = False
129
141
 
130
142
  def __getattribute__(self, name: str):
@@ -157,7 +169,7 @@ class SDK:
157
169
  {!--< /tips >!--}
158
170
  """
159
171
 
160
- def __init__(self, sdk_instance: Any):
172
+ def __init__(self, sdk_instance: SDK) -> None:
161
173
  """
162
174
  初始化协调器
163
175
 
@@ -310,7 +322,7 @@ class SDK:
310
322
  {!--< /tips >!--}
311
323
  """
312
324
 
313
- def __init__(self, sdk_instance: Any):
325
+ def __init__(self, sdk_instance: SDK) -> None:
314
326
  """
315
327
  反初始化协调器
316
328
 
@@ -17,13 +17,21 @@ example:
17
17
  {!--< /tips >!--}
18
18
  """
19
19
 
20
+ from __future__ import annotations
20
21
  import asyncio
21
22
  from pathlib import Path
22
- from typing import Any
23
+ from typing import TYPE_CHECKING
23
24
  from .Core import Event, lifecycle, logger
24
25
  from .Core import storage, env, config
25
26
  from .Core import adapter, AdapterFather, BaseAdapter, SendDSL
26
27
  from .Core import module, router, adapter_server
28
+ from .Core.lifecycle import LifecycleManager
29
+ from .Core.adapter import AdapterManager
30
+ from .Core.storage import StorageManager
31
+ from .Core.logger import Logger
32
+ from .Core.module import ModuleManager
33
+ from .Core.router import RouterManager
34
+ from .Core.config import ConfigManager
27
35
  from .loaders.module import LazyModule
28
36
  from .loaders.adapter import AdapterLoader
29
37
  from .loaders.module import ModuleLoader
@@ -51,19 +59,19 @@ class SDK:
51
59
  - adapter_server: 路由管理器别名
52
60
  {!--< /tips >!--}
53
61
  """
54
- Event: Any
55
- lifecycle: Any
56
- logger: Any
57
- storage: Any
58
- env: Any
59
- config: Any
60
- adapter: Any
61
- AdapterFather: Any
62
- BaseAdapter: Any
63
- SendDSL: Any
64
- module: Any
65
- router: Any
66
- adapter_server: Any
62
+ Event: ModuleType
63
+ lifecycle: LifecycleManager
64
+ logger: Logger
65
+ storage: StorageManager
66
+ env: StorageManager
67
+ config: ConfigManager
68
+ adapter: AdapterManager
69
+ AdapterFather: type[BaseAdapter]
70
+ BaseAdapter: type[BaseAdapter]
71
+ SendDSL: type[SendDSL]
72
+ module: ModuleManager
73
+ router: RouterManager
74
+ adapter_server: RouterManager
67
75
  def __init__(self: None) -> ...:
68
76
  """
69
77
  初始化 SDK 实例
@@ -1,32 +0,0 @@
1
- """
2
- Uninstall 命令实现
3
-
4
- 支持卸载模块、适配器、CLI 扩展
5
- """
6
-
7
- import sys
8
- from argparse import ArgumentParser
9
-
10
- from ..utils import PackageManager
11
- from ..base import Command
12
-
13
-
14
- class UninstallCommand(Command):
15
-
16
- name = "uninstall"
17
- description = "卸载模块/适配器包"
18
-
19
- def __init__(self):
20
- self.package_manager = PackageManager()
21
-
22
- def add_arguments(self, parser: ArgumentParser):
23
- parser.add_argument(
24
- 'package',
25
- nargs='+',
26
- help='要卸载的包名(可指定多个)'
27
- )
28
-
29
- def execute(self, args):
30
- success = self.package_manager.uninstall_package(args.package)
31
- if not success:
32
- sys.exit(1)
File without changes