ErisPulse 2.5.0.dev1__tar.gz → 2.5.1__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 (183) hide show
  1. erispulse-2.5.1/PKG-INFO +692 -0
  2. erispulse-2.5.1/README.md +623 -0
  3. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/pyproject.toml +14 -14
  4. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/cli.py +46 -2
  5. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/cli.pyi +8 -0
  6. erispulse-2.5.1/src/ErisPulse/CLI/commands/language.py +130 -0
  7. erispulse-2.5.1/src/ErisPulse/CLI/commands/language.pyi +52 -0
  8. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/run.py +3 -16
  9. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/run.pyi +1 -0
  10. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/__init__.py +120 -2
  11. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/__init__.pyi +35 -1
  12. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/en.py +89 -1
  13. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/ja.py +89 -1
  14. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/ru.py +89 -1
  15. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/zh_cn.py +89 -1
  16. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/zh_tw.py +89 -1
  17. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/utils/display.py +17 -14
  18. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/utils/display.pyi +5 -4
  19. erispulse-2.5.1/src/ErisPulse/CLI/utils/file_watcher.py +190 -0
  20. erispulse-2.5.1/src/ErisPulse/CLI/utils/file_watcher.pyi +125 -0
  21. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/utils/package_manager.py +223 -108
  22. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/utils/package_manager.pyi +17 -5
  23. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/adapter.py +19 -9
  24. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/adapter.pyi +2 -2
  25. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/command.py +100 -56
  26. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/command.pyi +7 -7
  27. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/adapter.py +22 -11
  28. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/constants.py +23 -0
  29. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/__init__.py +83 -7
  30. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/__init__.pyi +11 -5
  31. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/en.py +16 -0
  32. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/ja.py +16 -0
  33. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/ru.py +16 -0
  34. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/zh_cn.py +16 -0
  35. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/zh_tw.py +16 -0
  36. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/logger.py +34 -12
  37. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/logger.pyi +10 -6
  38. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/router.py +22 -12
  39. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/storage.py +293 -9
  40. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/storage.pyi +40 -3
  41. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/__init__.py +4 -0
  42. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/__init__.pyi +1 -0
  43. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/adapter.py +28 -0
  44. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/adapter.pyi +1 -0
  45. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/bases/loader.py +32 -1
  46. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/module.py +27 -4
  47. erispulse-2.5.1/src/ErisPulse/loaders/strict.py +297 -0
  48. erispulse-2.5.1/src/ErisPulse/loaders/strict.pyi +119 -0
  49. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/runtime/frame_config.py +7 -0
  50. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/runtime/frame_config.pyi +1 -1
  51. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/sdk.py +63 -1
  52. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/sdk.pyi +1 -0
  53. erispulse-2.5.1/src/ErisPulse/web_status/4xx.png +0 -0
  54. erispulse-2.5.1/src/ErisPulse/web_status/5xx.png +0 -0
  55. erispulse-2.5.1/src/ErisPulse/web_status/unknow.png +0 -0
  56. erispulse-2.5.0.dev1/PKG-INFO +0 -567
  57. erispulse-2.5.0.dev1/README.md +0 -494
  58. erispulse-2.5.0.dev1/src/ErisPulse/web_status/4xx.png +0 -0
  59. erispulse-2.5.0.dev1/src/ErisPulse/web_status/5xx.png +0 -0
  60. erispulse-2.5.0.dev1/src/ErisPulse/web_status/unknow.png +0 -0
  61. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/.gitignore +0 -0
  62. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/LICENSE +0 -0
  63. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/__init__.py +0 -0
  64. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/__init__.pyi +0 -0
  65. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/base.py +0 -0
  66. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/base.pyi +0 -0
  67. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/__init__.py +0 -0
  68. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
  69. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/create.py +0 -0
  70. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/create.pyi +0 -0
  71. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/init.py +0 -0
  72. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/init.pyi +0 -0
  73. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/install.py +0 -0
  74. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/install.pyi +0 -0
  75. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/list.py +0 -0
  76. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/list.pyi +0 -0
  77. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
  78. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
  79. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/self_update.py +0 -0
  80. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/self_update.pyi +0 -0
  81. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/uninstall.py +0 -0
  82. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/uninstall.pyi +0 -0
  83. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
  84. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
  85. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/console.py +0 -0
  86. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/console.pyi +0 -0
  87. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/__init__.py +0 -0
  88. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/__init__.pyi +0 -0
  89. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/en.pyi +0 -0
  90. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/ja.pyi +0 -0
  91. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/ru.pyi +0 -0
  92. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/zh_cn.pyi +0 -0
  93. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/i18n/locales/zh_tw.pyi +0 -0
  94. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/registry.py +0 -0
  95. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/registry.pyi +0 -0
  96. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/utils/__init__.py +0 -0
  97. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
  98. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/__init__.py +0 -0
  99. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/__init__.pyi +0 -0
  100. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/client.py +0 -0
  101. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/client.pyi +0 -0
  102. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/errors.py +0 -0
  103. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/errors.pyi +0 -0
  104. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/manager.py +0 -0
  105. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
  106. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/module.py +0 -0
  107. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/module.pyi +0 -0
  108. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/router.py +0 -0
  109. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/router.pyi +0 -0
  110. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/storage.py +0 -0
  111. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/storage.pyi +0 -0
  112. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/websocket.py +0 -0
  113. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Bases/websocket.pyi +0 -0
  114. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/__init__.py +0 -0
  115. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
  116. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/base.py +0 -0
  117. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/base.pyi +0 -0
  118. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/message.py +0 -0
  119. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/message.pyi +0 -0
  120. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/message_builder.py +0 -0
  121. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/message_builder.pyi +0 -0
  122. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/meta.py +0 -0
  123. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/meta.pyi +0 -0
  124. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/notice.py +0 -0
  125. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/notice.pyi +0 -0
  126. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/request.py +0 -0
  127. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/request.pyi +0 -0
  128. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/session_type.py +0 -0
  129. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
  130. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/wrapper.py +0 -0
  131. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/Event/wrapper.pyi +0 -0
  132. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/__init__.py +0 -0
  133. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/__init__.pyi +0 -0
  134. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/adapter.pyi +3 -3
  135. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/client.py +0 -0
  136. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/client.pyi +0 -0
  137. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/config.py +0 -0
  138. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/config.pyi +0 -0
  139. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/constants.pyi +0 -0
  140. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/constants.py +0 -0
  141. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/constants.pyi +0 -0
  142. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/__init__.py +0 -0
  143. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/__init__.pyi +0 -0
  144. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/en.pyi +0 -0
  145. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/ja.pyi +0 -0
  146. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/ru.pyi +0 -0
  147. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/zh_cn.pyi +0 -0
  148. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/i18n/locales/zh_tw.pyi +0 -0
  149. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/lifecycle.py +0 -0
  150. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/lifecycle.pyi +0 -0
  151. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/module.py +0 -0
  152. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/module.pyi +0 -0
  153. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/Core/router.pyi +0 -0
  154. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/__init__.py +0 -0
  155. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/__init__.pyi +0 -0
  156. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/__main__.py +0 -0
  157. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/__main__.pyi +0 -0
  158. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/finders/__init__.py +0 -0
  159. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/finders/__init__.pyi +0 -0
  160. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/finders/adapter.py +0 -0
  161. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/finders/adapter.pyi +0 -0
  162. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/finders/bases/__init__.py +0 -0
  163. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
  164. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/finders/bases/finder.py +0 -0
  165. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/finders/bases/finder.pyi +0 -0
  166. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/finders/module.py +0 -0
  167. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/finders/module.pyi +0 -0
  168. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/bases/__init__.py +0 -0
  169. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
  170. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/bases/loader.pyi +1 -1
  171. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/module.pyi +0 -0
  172. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/strategy.py +0 -0
  173. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/loaders/strategy.pyi +0 -0
  174. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/runtime/__init__.py +0 -0
  175. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/runtime/__init__.pyi +0 -0
  176. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/runtime/config_schema.py +0 -0
  177. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/runtime/config_schema.pyi +0 -0
  178. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/runtime/context.py +0 -0
  179. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/runtime/context.pyi +0 -0
  180. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/runtime/exceptions.py +0 -0
  181. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/runtime/exceptions.pyi +0 -0
  182. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/web_status/__init__.py +0 -0
  183. {erispulse-2.5.0.dev1 → erispulse-2.5.1}/src/ErisPulse/web_status/__init__.pyi +0 -0
@@ -0,0 +1,692 @@
1
+ Metadata-Version: 2.4
2
+ Name: ErisPulse
3
+ Version: 2.5.1
4
+ Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
+ Project-URL: Homepage, https://github.com/ErisPulse/ErisPulse
6
+ Project-URL: Documentation, https://www.erisdev.com#docs
7
+ Project-URL: Repository, https://github.com/ErisPulse/ErisPulse
8
+ Project-URL: Issues, https://github.com/ErisPulse/ErisPulse/issues
9
+ Project-URL: Bug Tracker, https://github.com/ErisPulse/ErisPulse/blob/main/docs/en/bug-tracker.md
10
+ Project-URL: Changelog, https://github.com/ErisPulse/ErisPulse/blob/main/CHANGELOG.md
11
+ Author: ErisDev
12
+ Maintainer-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
13
+ License: MIT License
14
+
15
+ Copyright (c) 2025-2026 ErisPulse
16
+
17
+ Permission is hereby granted, free of charge, to any person obtaining a copy
18
+ of this software and associated documentation files (the "Software"), to deal
19
+ in the Software without restriction, including without limitation the rights
20
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21
+ copies of the Software, and to permit persons to whom the Software is
22
+ furnished to do so, subject to the following conditions:
23
+
24
+ The above copyright notice and this permission notice shall be included in all
25
+ copies or substantial portions of the Software.
26
+
27
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33
+ SOFTWARE.
34
+ License-File: LICENSE
35
+ Keywords: async,asyncio,bot,bot-framework,chatbot,email,extensible,framework,instant-messaging,kook,matrix,modular,multi-platform,onebot,onebot12,qq,robot,sdk,telegram,yunhu
36
+ Classifier: Development Status :: 4 - Beta
37
+ Classifier: Framework :: AsyncIO
38
+ Classifier: Intended Audience :: Developers
39
+ Classifier: License :: OSI Approved :: MIT License
40
+ Classifier: Operating System :: OS Independent
41
+ Classifier: Programming Language :: Python :: 3
42
+ Classifier: Programming Language :: Python :: 3 :: Only
43
+ Classifier: Programming Language :: Python :: 3.10
44
+ Classifier: Programming Language :: Python :: 3.11
45
+ Classifier: Programming Language :: Python :: 3.12
46
+ Classifier: Programming Language :: Python :: 3.13
47
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
48
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
49
+ Classifier: Typing :: Typed
50
+ Requires-Python: >=3.10
51
+ Requires-Dist: aiohttp>=3.9.0
52
+ Requires-Dist: fastapi>=0.116.1
53
+ Requires-Dist: rich>=13.0.0
54
+ Requires-Dist: toml>=0.10.2
55
+ Requires-Dist: uvicorn>=0.30.0
56
+ Requires-Dist: websockets>=12.0
57
+ Provides-Extra: dev
58
+ Requires-Dist: pyclean>=3.6.0; extra == 'dev'
59
+ Requires-Dist: ruff>=0.1.7; extra == 'dev'
60
+ Provides-Extra: test
61
+ Requires-Dist: httpx>=0.24.0; extra == 'test'
62
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'test'
63
+ Requires-Dist: pytest-benchmark>=4.0.0; extra == 'test'
64
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
65
+ Requires-Dist: pytest-mock>=3.10.0; extra == 'test'
66
+ Requires-Dist: pytest-xdist>=3.0.0; extra == 'test'
67
+ Requires-Dist: pytest>=7.0.0; extra == 'test'
68
+ Description-Content-Type: text/markdown
69
+
70
+ <img src=".github/assets/mascot-hero.png" align="right" width="300" alt="ErisPulse" style="margin-left: 24px; margin-bottom: 16px; border-radius: 12px;" />
71
+
72
+ **English** | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [Русский](README.ru.md)
73
+
74
+ # ErisPulse
75
+
76
+ **Write once, deploy on multiple platforms.**
77
+
78
+ Event-driven multi-platform chatbot development framework.
79
+
80
+ Based on the OneBot12 standard interface, write once and deploy on multiple platforms. Flexible plugin system, hot reload support, and a complete developer toolchain, suitable for scenarios ranging from simple chatbots to complex automation systems.
81
+
82
+ <p>
83
+ <a href="https://pypi.org/project/ErisPulse/"><img src="https://img.shields.io/pypi/v/ErisPulse?style=for-the-badge&logo=pypi&logoColor=white" alt="PyPI"></a>
84
+ <a href="https://pypi.org/project/ErisPulse/"><img src="https://img.shields.io/badge/Python-3.10+-FFD43B?style=for-the-badge&logo=python&logoColor=blue" alt="Python"></a>
85
+ <a href="https://hub.docker.com/r/erispulse/erispulse"><img src="https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white" alt="Docker"></a>
86
+ <a href="https://github.com/ErisPulse/ErisPulse/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue?style=for-the-badge" alt="License"></a>
87
+ <a href="https://github.com/ErisPulse/ErisPulse"><img src="https://img.shields.io/github/stars/ErisPulse/ErisPulse?style=for-the-badge&logo=github&color=brightgreen" alt="Stars"></a>
88
+ <a href="https://pepy.tech/project/ErisPulse"><img src="https://img.shields.io/pepy/dt/ErisPulse?style=for-the-badge&color=blue" alt="Downloads"></a>
89
+ <a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json&style=for-the-badge" alt="Ruff"></a>
90
+ <a href="https://socket.dev/pypi/package/erispulse"><img src="https://img.shields.io/badge/Socket-Secure-2ea043?style=for-the-badge&logo=socket&logoColor=white" alt="Socket"></a>
91
+ <a href="https://www.erisdev.com"><img src="https://img.shields.io/badge/文档-erisdev.com-FF6B9D?style=for-the-badge&logo=bookstack&logoColor=white" alt="文档"></a>
92
+ <a href="https://www.erisdev.com/#market"><img src="https://img.shields.io/badge/模块市场-erisdev.com-C724B1?style=for-the-badge&logo=webpack&logoColor=white" alt="模块市场"></a>
93
+ <a href="https://github.com/ErisPulse/ErisPulse/discussions"><img src="https://img.shields.io/badge/GitHub-Discussions-181717?style=for-the-badge&logo=github" alt="讨论"></a>
94
+ </p>
95
+
96
+ <br clear="both">
97
+
98
+ ---
99
+
100
+ <div align="center">
101
+
102
+ ### Core Features
103
+
104
+ </div>
105
+
106
+ <table>
107
+ <tr>
108
+ <td width="33%" align="center" valign="top">
109
+ <br/>
110
+
111
+ <img src=".github/assets/icon/icon_event_driven.png.png" width="50" alt="Event-driven Architecture" />
112
+
113
+ ### Event-driven Architecture
114
+
115
+ A clear event model based on the OneBot12 standard, making message handling logic more intuitive and efficient
116
+
117
+ </td>
118
+ <td width="33%" align="center" valign="top">
119
+ <br/>
120
+
121
+ <img src=".github/assets/icon/icon_cross_platform.png.png" width="50" alt="Cross-platform Compatibility" />
122
+
123
+ ### Cross-platform Compatibility
124
+
125
+ Write plugins once and use them on all platforms, no need to repeat development for different platforms
126
+
127
+ </td>
128
+ <td width="33%" align="center" valign="top">
129
+ <br/>
130
+
131
+ <img src=".github/assets/icon/icon_modular.png" width="50" alt="Modular Design" />
132
+
133
+ ### Modular Design
134
+
135
+ A flexible plugin system, easy to extend and integrate, supports hot-plug module management
136
+
137
+ </td>
138
+ </tr>
139
+ <tr>
140
+ <td width="33%" align="center" valign="top">
141
+ <br/>
142
+
143
+ <img src=".github/assets/icon/icon_hot_reload.png" width="50" alt="Hot Reload" />
144
+
145
+ ### Hot Reload
146
+
147
+ Reload code without restarting during development
148
+
149
+ </td>
150
+ <td width="33%" align="center" valign="top">
151
+ <br/>
152
+
153
+ <img src=".github/assets/icon/icon_ai_assist.png" width="50" alt="AI Assistance" />
154
+
155
+ ### AI Assistance
156
+
157
+ AI-assisted development brings requirements directly to usable modules
158
+
159
+ </td>
160
+ <td width="33%" align="center" valign="top">
161
+ <br/>
162
+
163
+ <img src=".github/assets/icon/icon_lightweight.png" width="50" alt="Concise and Elegant" />
164
+
165
+ ### Concise and Elegant
166
+
167
+ Intuitive API design, making code as light and readable as feathers
168
+
169
+ </td>
170
+ </tr>
171
+ </table>
172
+
173
+ ---
174
+
175
+ ## The Same Code. Multiple Platforms.
176
+
177
+ *Exactly the same command handlers. Different platforms. No business logic changes required.*
178
+
179
+ <table>
180
+ <tr>
181
+ <td align="center" width="33%">
182
+
183
+ **Kook**
184
+
185
+ <img src=".github/assets/demo-kook.png" alt="Kook Demo" />
186
+
187
+ </td>
188
+ <td align="center" width="33%">
189
+
190
+ **QQ**
191
+
192
+ <img src=".github/assets/demo-qq.png" alt="QQ Demo" />
193
+
194
+ </td>
195
+ <td align="center" width="33%">
196
+
197
+ **Yunhu**
198
+
199
+ <img src=".github/assets/demo-yunhu.png" alt="Yunhu Demo" />
200
+
201
+ </td>
202
+ </tr>
203
+ </table>
204
+
205
+ ---
206
+
207
+ ## Ecosystem
208
+
209
+ ErisPulse is more than just a framework. Install and start, no need to reinvent the wheel from scratch.
210
+
211
+ <table>
212
+ <tr>
213
+ <td align="center" width="25%">
214
+
215
+ **Framework**
216
+
217
+ Core runtime
218
+
219
+ Unified event & message model
220
+
221
+ </td>
222
+ <td align="center" width="25%">
223
+
224
+ **Dashboard**
225
+
226
+ Visual management
227
+
228
+ Plugins · Logs · Configuration
229
+
230
+ [Online Demo →](https://dashdemo.erisdev.com/)
231
+
232
+ </td>
233
+ <td align="center" width="25%">
234
+
235
+ **AI Builder**
236
+
237
+ Natural language → usable modules
238
+
239
+ [Experience Now →](https://www.erisdev.com/#builder)
240
+
241
+ </td>
242
+ <td align="center" width="25%">
243
+
244
+ **Module Market**
245
+
246
+ Ready-to-use plugins
247
+
248
+ [Explore Modules →](https://www.erisdev.com/#market)
249
+
250
+ </td>
251
+ </tr>
252
+ <tr>
253
+ <td align="center" width="25%">
254
+
255
+ **Adapters**
256
+
257
+ Access to 15+ platforms
258
+
259
+ </td>
260
+ <td align="center" width="25%">
261
+
262
+ **Documentation**
263
+
264
+ [erisdev.com](https://www.erisdev.com)
265
+
266
+ </td>
267
+ <td align="center" width="25%">
268
+
269
+ **Docker**
270
+
271
+ Multi-architecture support
272
+
273
+ `erispulse/erispulse`
274
+
275
+ </td>
276
+ <td align="center" width="25%">
277
+
278
+ **CLI**
279
+
280
+ `epsdk` scaffolding tool
281
+
282
+ </td>
283
+ </tr>
284
+ </table>
285
+
286
+ ---
287
+
288
+ ## Project Origin
289
+
290
+ ErisPulse was not born to be a framework.
291
+
292
+ It originated from **Amer** — a project for message interconnection and synchronization between different platforms.
293
+
294
+ As the number of connected platforms increased, we began maintaining the asynchronous version of **ryunhusdk2**, gradually abstracting a unified event model and adapter system.
295
+
296
+ These practices eventually evolved into today's ErisPulse.
297
+
298
+ Its goal has never changed:
299
+
300
+ **Let developers focus on business, not platform differences.**
301
+
302
+ ---
303
+
304
+ ### Quick Start
305
+
306
+ #### One-click Installation Script (Recommended)
307
+
308
+ The installation script automatically detects your environment (Docker, Python, uv), guides you to choose the most suitable installation method, and supports multiple languages (Chinese/English/日本語/Русский/繁體中文).
309
+
310
+ Windows (PowerShell):
311
+ ```powershell
312
+ irm https://get.erisdev.com/install.ps1 -OutFile install.ps1; powershell -ExecutionPolicy Bypass -File install.ps1
313
+ ```
314
+
315
+ macOS / Linux:
316
+ ```bash
317
+ curl -fsSL https://get.erisdev.com/install.sh -o install.sh && chmod +x install.sh && ./install.sh
318
+ ```
319
+
320
+ <table>
321
+ <tr>
322
+ <td align="center" width="50%">
323
+
324
+ **Docker Installation Demo**
325
+
326
+ <video src="https://github.com/user-attachments/assets/a367a466-4678-46a9-b101-073a86388ede" controls width="100%"></video>
327
+
328
+ </td>
329
+ <td align="center" width="50%">
330
+
331
+ **pip Installation Demo**
332
+
333
+ <video src="https://github.com/user-attachments/assets/a2df4009-dba6-411e-b79d-4454a168d063" controls width="100%"></video>
334
+
335
+ </td>
336
+ </tr>
337
+ </table>
338
+
339
+ #### Using Docker (Recommended)
340
+
341
+ ```bash
342
+ docker pull erispulse/erispulse:latest
343
+ ```
344
+
345
+ <details>
346
+ <summary>Unable to access Docker Hub?</summary>
347
+
348
+ If Docker Hub is inaccessible, you can use GitHub Container Registry:
349
+
350
+ ```bash
351
+ docker pull ghcr.io/erispulse/erispulse:latest
352
+ ```
353
+
354
+ When using the ghcr.io image, you need to modify the `docker-compose.yml` image:
355
+ ```yaml
356
+ image: ghcr.io/erispulse/erispulse:latest
357
+ ```
358
+
359
+ </details>
360
+
361
+ <details>
362
+ <summary>Quick Start</summary>
363
+
364
+ ```bash
365
+ # Download docker-compose.yml
366
+ curl -O https://raw.githubusercontent.com/ErisPulse/ErisPulse/main/docker-compose.yml
367
+
368
+ # Set Dashboard login token and start
369
+ ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
370
+ ```
371
+
372
+ > The image includes the ErisPulse framework and Dashboard management panel, supporting `linux/amd64` and `linux/arm64` architectures.
373
+
374
+ After starting, visit `http://<host>:<port>/Dashboard` and use the set token as the password to log in to the Dashboard management panel.
375
+
376
+ </details>
377
+
378
+ <details>
379
+ <summary>Using Pre-release Version (Dev)</summary>
380
+
381
+ Set `ERISPULSE_CHANNEL=dev` to use the pre-release version:
382
+
383
+ ```bash
384
+ # Method 1: Using environment variables (recommended)
385
+ ERISPULSE_CHANNEL=dev ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
386
+
387
+ # Method 2: Building dev image
388
+ ERISPULSE_BUILD_TARGET=dev docker compose up -d --build
389
+ ```
390
+
391
+ To ensure automatic update to the latest version at startup (regardless of stable or dev), explicitly set `ERISPULSE_UPDATE_ON_START=true`:
392
+
393
+ ```bash
394
+ ERISPULSE_CHANNEL=dev ERISPULSE_UPDATE_ON_START=true docker compose up -d
395
+ ```
396
+
397
+ You can also pull the pre-built dev image:
398
+
399
+ ```bash
400
+ docker pull erispulse/erispulse:dev
401
+ ```
402
+
403
+ </details>
404
+
405
+ <details>
406
+ <summary>Docker Environment Variables</summary>
407
+
408
+ | Variable | Default | Description |
409
+ |------|--------|------|
410
+ | `ERISPULSE_CHANNEL` | `stable` | Version channel: `stable` (stable) or `dev` (pre-release) |
411
+ | `ERISPULSE_UPDATE_ON_START` | `false` | Whether to automatically update to the latest version when the container starts (must be explicitly enabled) |
412
+ | `ERISPULSE_DASHBOARD_TOKEN` | empty | Dashboard login token |
413
+ | `ERISPULSE_PORT` | `8000` | Dashboard port mapping |
414
+ | `TZ` | `Asia/Shanghai` | Container timezone |
415
+
416
+ > Setting `ERISPULSE_UPDATE_ON_START=true` ensures that even if the image is old, the container will automatically fetch the latest version at startup.
417
+
418
+ </details>
419
+
420
+ #### 1Panel App Store
421
+
422
+ Install ErisPulse with one click via the [1Panel](https://1panel.cn) app store, see [ErisPulse-1Panel](https://github.com/ErisPulse/ErisPulse-1Panel).
423
+
424
+ ```bash
425
+ bash <(curl -sL https://get-1panel.erisdev.com/install.sh)
426
+ ```
427
+
428
+ ErisPulse is available in the 1Panel third-party app store, and can be installed using the [okxlin/appstore](https://github.com/okxlin/appstore) third-party repository.
429
+
430
+ #### Install Using pip
431
+
432
+ ```bash
433
+ pip install ErisPulse
434
+ ```
435
+
436
+ > You can also use the one-click installation script above, which automatically detects the environment and guides configuration.
437
+
438
+ #### Initialize Project
439
+
440
+ ```bash
441
+ # Interactive initialization
442
+ epsdk init
443
+
444
+ # Quick initialization (specify project name)
445
+ epsdk init -q -n my_bot
446
+ ```
447
+
448
+ #### Create Your First Bot
449
+
450
+ Create a `main.py` file:
451
+
452
+ <table>
453
+ <tr>
454
+ <td width="50%" valign="top">
455
+
456
+ **Command Handlers**
457
+
458
+ ```python
459
+ from ErisPulse import sdk
460
+ from ErisPulse.Core.Event import command
461
+
462
+ @command("hello", help="Send a greeting message")
463
+ async def hello_handler(event):
464
+ user_name = event.get_user_nickname() or "friend"
465
+ await event.reply(f"Hello, {user_name}!")
466
+
467
+ @command("ping", help="Test if the bot is online")
468
+ async def ping_handler(event):
469
+ await event.reply("Pong! The bot is running normally.")
470
+
471
+ if __name__ == "__main__":
472
+ import asyncio
473
+ asyncio.run(sdk.run(keep_running=True))
474
+ ```
475
+
476
+ </td>
477
+ <td width="50%" valign="top">
478
+
479
+ **Effect Explanation**
480
+
481
+ Send `/hello`
482
+
483
+ Bot replies: `Hello, {username}!`
484
+
485
+ ---
486
+
487
+ Send `/ping`
488
+
489
+ Bot replies: `Pong! The bot is running normally.`
490
+
491
+ ---
492
+
493
+ **Running Method**
494
+
495
+ ```bash
496
+ epsdk run main.py
497
+ # or development mode
498
+ epsdk run main.py --reload
499
+ ```
500
+
501
+ </td>
502
+ </tr>
503
+ </table>
504
+
505
+ For more detailed instructions, see:
506
+ - [Quick Start Guide](docs/en/quick-start.md)
507
+ - [Getting Started Guide](docs/en/getting-started/)
508
+
509
+ #### Multi-turn Conversation Example
510
+
511
+ ErisPulse includes a powerful multi-turn conversation engine, easily enabling guided operations, information collection, and other interactive scenarios:
512
+
513
+ ```python
514
+ from ErisPulse.Core.Event import command, request
515
+
516
+ @command("register")
517
+ async def register_handler(event):
518
+ conv = event.conversation(timeout=60)
519
+
520
+ await conv.say("Welcome to register!")
521
+
522
+ # Multi-step collection of user information, with automatic validation
523
+ data = await conv.collect([
524
+ {"key": "name", "prompt": "Please enter your name"},
525
+ {"key": "age", "prompt": "Please enter your age",
526
+ "validator": lambda e: e.get_text().strip().isdigit(),
527
+ "retry_prompt": "Age must be a number, please re-enter"},
528
+ ])
529
+
530
+ if data and await conv.confirm(f"Confirm registration? Name: {data['name']}, Age: {data['age']}"):
531
+ # Push notifications using SendDSL
532
+ await sdk.adapter.get(event.get_platform()).Send.To(
533
+ "user", event.get_user_id()
534
+ ).Text(f"Registration successful! Welcome {data['name']}")
535
+ # Or await event.reply("Registration successful!")
536
+
537
+ # Automatically handle friend requests
538
+ @request.on_friend_request()
539
+ async def handle_friend_request(event):
540
+ user_name = event.get_user_nickname() or event.get_user_id()
541
+
542
+ # Approve the request
543
+ result = await event.approve()
544
+ if result.get("status") == "ok":
545
+ await event.reply(f"Friend request automatically approved, welcome {user_name}")
546
+ ```
547
+
548
+ <details>
549
+ <summary>See More Conversation API (Branching / Selection / Persistence)</summary>
550
+
551
+ ```python
552
+ @command("quiz")
553
+ async def quiz_handler(event):
554
+ conv = event.conversation(timeout=30)
555
+
556
+ # Multiple choice question
557
+ answer = await conv.choose("Who is the creator of Python?", [
558
+ "Guido van Rossum",
559
+ "James Gosling",
560
+ "Dennis Ritchie",
561
+ ])
562
+
563
+ if answer == 0:
564
+ await conv.say("Correct!")
565
+ elif answer is None:
566
+ await conv.say("Timed out, try again next time!")
567
+ else:
568
+ await conv.say("Incorrect, the correct answer is Guido van Rossum")
569
+
570
+ @command("menu")
571
+ async def menu_handler(event):
572
+ conv = event.conversation(timeout=60)
573
+
574
+ # Branching, building complex interaction flows
575
+ @conv.branch("main")
576
+ async def main_menu():
577
+ await conv.say("=== Main Menu ===\n1. Personal Info\n2. Settings\n3. Exit")
578
+ resp = await conv.wait()
579
+ if resp and resp.get_text().strip() == "1":
580
+ await conv.goto("profile")
581
+
582
+ @conv.branch("profile")
583
+ async def profile():
584
+ await conv.say("Name: Alice\n0. Return")
585
+ resp = await conv.wait()
586
+ if resp and resp.get_text().strip() == "0":
587
+ await conv.goto("main")
588
+
589
+ await conv.start()
590
+ ```
591
+
592
+ See [Conversation Multi-turn Dialogue](docs/en/advanced/conversation.md)
593
+
594
+ </details>
595
+
596
+ ---
597
+
598
+ ## Supported Platforms
599
+
600
+ We welcome contributions to adapters!
601
+
602
+ | Adapter | Description |
603
+ |--------|------|
604
+ | <img src=".github/assets/adapter_logo/kook.svg" height="20" alt="Kook" /> [Kook](https://github.com/shanfishapp/ErisPulse-KookAdapter) | Kook (Kaihei La) instant messaging platform |
605
+ | <img src=".github/assets/adapter_logo/matrix.svg" height="20" alt="Matrix" /> [Matrix](https://github.com/ErisPulse/ErisPulse-MatrixAdapter) | Matrix decentralized communication protocol |
606
+ | <img src=".github/assets/adapter_logo/onebot.png" height="20" alt="OneBot" /> [OneBot11](https://github.com/ErisPulse/ErisPulse-OneBot11Adapter) | OneBot v11 general robot protocol |
607
+ | <img src=".github/assets/adapter_logo/onebot.png" height="20" alt="OneBot" /> [OneBot12](https://github.com/ErisPulse/ErisPulse-OneBot12Adapter) | OneBot v12 standard protocol |
608
+ | <img src=".github/assets/adapter_logo/qqbot.svg" height="20" alt="QQ" /> [QQ](https://github.com/ErisPulse/ErisPulse-QQBotAdapter) | Official QQ bot platform |
609
+ | <img src=".github/assets/adapter_logo/sandbox.png" height="20" alt="Sandbox" /> [Sandbox](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) | Web-based debugging, no need to connect to real platforms |
610
+ | <img src=".github/assets/adapter_logo/telegram.svg" height="20" alt="Telegram" /> [Telegram](https://github.com/ErisPulse/ErisPulse-TelegramAdapter) | Global instant messaging platform |
611
+ | <img src=".github/assets/adapter_logo/email.svg" height="20" alt="Email" /> [Email](https://github.com/ErisPulse/ErisPulse-EmailAdapter) | Email protocol adapter for sending and receiving |
612
+ | <img src=".github/assets/adapter_logo/yunhu.png" height="20" alt="Yunhu" /> [Yunhu](https://github.com/ErisPulse/ErisPulse-YunhuAdapter) | Enterprise-level instant messaging platform (robot access) |
613
+ | <img src=".github/assets/adapter_logo/yunhu.png" height="20" alt="Yunhu" /> [Yunhu User](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) | Access adapter based on Yunhu user protocol |
614
+ | [Flower Maple Cafe](https://github.com/ErisPulse/ErisPulse-Ideaura/) | Allons! \(・ω・) / |
615
+ | <img src=".github/assets/adapter_logo/discord.svg" height="20" alt="Discord" /> [Discord](https://github.com/ErisPulse/ErisPulse-DiscordAdapter) | Global community communication platform, supports servers, channels, and private messages |
616
+ | <img src=".github/assets/adapter_logo/webhook.svg" height="20" alt="Webhook" /> [Webhook](https://github.com/ErisPulse/ErisPulse-WebhookAdapter) | General HTTP bridge adapter, connects to any system |
617
+ | <img src=".github/assets/adapter_logo/wechatmp.svg" height="20" alt="WechatMp" /> [WeChat Official Account](https://github.com/ErisPulse/ErisPulse-WechatMpAdapter) | Official WeChat Official Account platform |
618
+
619
+ See [Adapter Details](docs/en/platform-guide/README.md)
620
+
621
+ ---
622
+
623
+ ### Use Cases
624
+
625
+ <div align="center">
626
+
627
+ | Multi-platform Bot | Chat Assistant | Automation Tool | Message Forwarding |
628
+ |:---:|:---:|:---:|:---:|
629
+ | Deploy identical bots on multiple platforms | Integrate AI chat modules for entertainment and interaction | Message notification, task management, data collection | Cross-platform message synchronization and forwarding |
630
+
631
+ </div>
632
+
633
+ ---
634
+
635
+ ## Community
636
+
637
+ Join the ErisPulse community to exchange and build the ecosystem with developers.
638
+
639
+ ### Yunhu
640
+
641
+ Group ID: `635409929`
642
+
643
+ Join the group chat:
644
+
645
+ https://yhfx.jwznb.com/share?key=VWJL4fTWXepa&ts=1781889199
646
+
647
+ ### QQ Group
648
+
649
+ https://qm.qq.com/q/TOwnCmypcy
650
+
651
+ ### Telegram
652
+
653
+ https://t.me/ErisPulse
654
+
655
+ ---
656
+
657
+ ### Contribution Guidelines
658
+
659
+ The health of the ErisPulse project still needs your contribution! We welcome all forms of contributions:
660
+
661
+ 1. **Report Issues** — Submit bug reports in [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues)
662
+ 2. **Feature Requests** — Propose new ideas via [Community Discussions](https://github.com/ErisPulse/ErisPulse/discussions)
663
+ 3. **Code Contributions** — Please read the [Code Style](docs/en/styleguide/) and [Contribution Guidelines](CONTRIBUTING.md) before submitting a PR
664
+ 4. **Documentation Improvements** — Help improve documentation and example code
665
+
666
+ [Join Community Discussions](https://github.com/ErisPulse/ErisPulse/discussions)
667
+
668
+ ---
669
+
670
+ ## Star History
671
+
672
+ [![Star History Chart](https://api.star-history.com/svg?repos=ErisPulse/ErisPulse&type=Date)](https://star-history.com/#ErisPulse/ErisPulse&Date)
673
+
674
+ ---
675
+
676
+ <div align="center">
677
+
678
+ ### Acknowledgments
679
+
680
+ <img src=".github/assets/thanks.png" width="200" alt="Thanks" />
681
+
682
+ This project is partially based on code from [sdkFrame](https://github.com/runoneall/sdkFrame).
683
+
684
+ The core adapter standardization layer references and benefits from the [OneBot12 specification](https://12.onebot.dev/).
685
+
686
+ Special thanks to the Yunhu ecosystem and community.
687
+
688
+ The early exploration and growth of ErisPulse would not have been possible without the support of the Yunhu developer community, where many ideas, adapters, and practical experiences originated.
689
+
690
+ We also thank all developers and project authors who have contributed to ErisPulse, OneBot, and the open-source community.
691
+
692
+ </div>