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.
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/.gitignore +20 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/PKG-INFO +18 -6
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/README.md +17 -5
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/pyproject.toml +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/init.py +3 -3
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/init.pyi +1 -1
- erispulse-2.3.9.dev3/src/ErisPulse/CLI/commands/uninstall.py +137 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/uninstall.pyi +7 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/command.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/command.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/message.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/message.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/meta.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/meta.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/notice.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/notice.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/request.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/request.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/adapter.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/adapter.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/config.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/config.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/lifecycle.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/lifecycle.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/logger.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/logger.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/module.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/module.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/router.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/router.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/storage.py +1 -1
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/storage.pyi +2 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/sdk.py +29 -17
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/sdk.pyi +22 -14
- erispulse-2.3.9.dev1/src/ErisPulse/CLI/commands/uninstall.py +0 -32
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/LICENSE +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/base.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/base.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/cli.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/cli.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/install.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/install.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/list.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/list.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/run.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/run.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/self_update.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/self_update.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/console.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/console.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/registry.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/registry.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/utils/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/utils/package_manager.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/CLI/utils/package_manager.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/adapter.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/adapter.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/manager.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/module.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Bases/module.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/base.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/base.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/session_type.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/wrapper.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/Event/wrapper.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/Core/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/__main__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/__main__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/adapter.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/adapter.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/bases/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/bases/finder.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/bases/finder.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/cli.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/cli.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/module.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/finders/module.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/adapter.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/adapter.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/bases/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/bases/loader.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/module.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/module.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/strategy.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/loaders/strategy.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/__init__.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/__init__.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/cleanup.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/cleanup.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/exceptions.py +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/exceptions.pyi +0 -0
- {erispulse-2.3.9.dev1 → erispulse-2.3.9.dev3}/src/ErisPulse/runtime/frame_config.py +0 -0
- {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.
|
|
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
|
帮助完善文档和示例代码
|
|
@@ -177,7 +177,7 @@ class InitCommand(Command):
|
|
|
177
177
|
"email": "邮件适配器"
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
def _configure_adapters_interactive_sync(self, project_path:
|
|
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(
|
|
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:
|
|
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
|
+
...
|
|
@@ -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
|
|
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:
|
|
69
|
+
Event: ModuleType
|
|
58
70
|
"""事件系统"""
|
|
59
71
|
|
|
60
|
-
lifecycle:
|
|
72
|
+
lifecycle: LifecycleManager
|
|
61
73
|
"""生命周期管理器"""
|
|
62
74
|
|
|
63
|
-
logger:
|
|
75
|
+
logger: Logger
|
|
64
76
|
"""日志管理器"""
|
|
65
77
|
|
|
66
|
-
storage:
|
|
78
|
+
storage: StorageManager
|
|
67
79
|
"""存储管理器"""
|
|
68
80
|
|
|
69
|
-
env:
|
|
81
|
+
env: StorageManager
|
|
70
82
|
"""存储管理器别名"""
|
|
71
83
|
|
|
72
|
-
config:
|
|
84
|
+
config: ConfigManager
|
|
73
85
|
"""配置管理器"""
|
|
74
86
|
|
|
75
|
-
adapter:
|
|
87
|
+
adapter: AdapterManager
|
|
76
88
|
"""适配器管理器"""
|
|
77
89
|
|
|
78
|
-
AdapterFather:
|
|
90
|
+
AdapterFather: type[BaseAdapter]
|
|
79
91
|
"""适配器基类别名"""
|
|
80
92
|
|
|
81
|
-
BaseAdapter:
|
|
93
|
+
BaseAdapter: type[BaseAdapter]
|
|
82
94
|
"""适配器基类"""
|
|
83
95
|
|
|
84
|
-
SendDSL:
|
|
96
|
+
SendDSL: type[SendDSL]
|
|
85
97
|
"""DSL 发送接口基类"""
|
|
86
98
|
|
|
87
|
-
module:
|
|
99
|
+
module: ModuleManager
|
|
88
100
|
"""模块管理器"""
|
|
89
101
|
|
|
90
|
-
router:
|
|
102
|
+
router: RouterManager
|
|
91
103
|
"""路由管理器"""
|
|
92
104
|
|
|
93
|
-
adapter_server:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
55
|
-
lifecycle:
|
|
56
|
-
logger:
|
|
57
|
-
storage:
|
|
58
|
-
env:
|
|
59
|
-
config:
|
|
60
|
-
adapter:
|
|
61
|
-
AdapterFather:
|
|
62
|
-
BaseAdapter:
|
|
63
|
-
SendDSL:
|
|
64
|
-
module:
|
|
65
|
-
router:
|
|
66
|
-
adapter_server:
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|