ErisPulse 2.5.0.dev1__tar.gz → 2.5.0.dev2__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 (178) hide show
  1. erispulse-2.5.0.dev2/PKG-INFO +560 -0
  2. erispulse-2.5.0.dev2/README.md +496 -0
  3. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/pyproject.toml +6 -13
  4. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/cli.py +46 -2
  5. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/cli.pyi +8 -0
  6. erispulse-2.5.0.dev2/src/ErisPulse/CLI/commands/language.py +130 -0
  7. erispulse-2.5.0.dev2/src/ErisPulse/CLI/commands/language.pyi +52 -0
  8. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/run.py +3 -16
  9. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/run.pyi +1 -0
  10. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/__init__.py +120 -2
  11. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/__init__.pyi +35 -1
  12. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/en.py +89 -1
  13. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/ja.py +89 -1
  14. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/ru.py +89 -1
  15. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/zh_cn.py +89 -1
  16. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/zh_tw.py +89 -1
  17. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/utils/display.py +17 -14
  18. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/utils/display.pyi +5 -4
  19. erispulse-2.5.0.dev2/src/ErisPulse/CLI/utils/file_watcher.py +190 -0
  20. erispulse-2.5.0.dev2/src/ErisPulse/CLI/utils/file_watcher.pyi +125 -0
  21. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/utils/package_manager.py +223 -108
  22. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/utils/package_manager.pyi +17 -5
  23. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/command.py +100 -56
  24. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/command.pyi +7 -7
  25. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/runtime/frame_config.py +1 -0
  26. erispulse-2.5.0.dev1/PKG-INFO +0 -567
  27. erispulse-2.5.0.dev1/README.md +0 -494
  28. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/.gitignore +0 -0
  29. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/LICENSE +0 -0
  30. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/__init__.py +0 -0
  31. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/__init__.pyi +0 -0
  32. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/base.py +0 -0
  33. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/base.pyi +0 -0
  34. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/__init__.py +0 -0
  35. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
  36. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/create.py +0 -0
  37. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/create.pyi +0 -0
  38. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/init.py +0 -0
  39. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/init.pyi +0 -0
  40. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/install.py +0 -0
  41. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/install.pyi +0 -0
  42. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/list.py +0 -0
  43. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/list.pyi +0 -0
  44. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
  45. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
  46. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/self_update.py +0 -0
  47. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/self_update.pyi +0 -0
  48. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/uninstall.py +0 -0
  49. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/uninstall.pyi +0 -0
  50. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
  51. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
  52. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/console.py +0 -0
  53. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/console.pyi +0 -0
  54. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/__init__.py +0 -0
  55. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/__init__.pyi +0 -0
  56. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/en.pyi +0 -0
  57. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/ja.pyi +0 -0
  58. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/ru.pyi +0 -0
  59. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/zh_cn.pyi +0 -0
  60. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/i18n/locales/zh_tw.pyi +0 -0
  61. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/registry.py +0 -0
  62. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/registry.pyi +0 -0
  63. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/utils/__init__.py +0 -0
  64. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
  65. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/__init__.py +0 -0
  66. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/__init__.pyi +0 -0
  67. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/adapter.py +0 -0
  68. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/adapter.pyi +0 -0
  69. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/client.py +0 -0
  70. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/client.pyi +0 -0
  71. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/errors.py +0 -0
  72. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/errors.pyi +0 -0
  73. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/manager.py +0 -0
  74. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
  75. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/module.py +0 -0
  76. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/module.pyi +0 -0
  77. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/router.py +0 -0
  78. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/router.pyi +0 -0
  79. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/storage.py +0 -0
  80. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/storage.pyi +0 -0
  81. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/websocket.py +0 -0
  82. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Bases/websocket.pyi +0 -0
  83. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/__init__.py +0 -0
  84. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
  85. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/base.py +0 -0
  86. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/base.pyi +0 -0
  87. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/message.py +0 -0
  88. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/message.pyi +0 -0
  89. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/message_builder.py +0 -0
  90. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/message_builder.pyi +0 -0
  91. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/meta.py +0 -0
  92. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/meta.pyi +0 -0
  93. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/notice.py +0 -0
  94. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/notice.pyi +0 -0
  95. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/request.py +0 -0
  96. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/request.pyi +0 -0
  97. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/session_type.py +0 -0
  98. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
  99. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/wrapper.py +0 -0
  100. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/Event/wrapper.pyi +0 -0
  101. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/__init__.py +0 -0
  102. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/__init__.pyi +0 -0
  103. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/adapter.py +0 -0
  104. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/adapter.pyi +0 -0
  105. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/client.py +0 -0
  106. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/client.pyi +0 -0
  107. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/config.py +0 -0
  108. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/config.pyi +0 -0
  109. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/constants.py +0 -0
  110. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/constants.pyi +0 -0
  111. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/__init__.py +0 -0
  112. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/__init__.pyi +0 -0
  113. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/constants.py +0 -0
  114. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/constants.pyi +0 -0
  115. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/__init__.py +0 -0
  116. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/__init__.pyi +0 -0
  117. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/en.py +0 -0
  118. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/en.pyi +0 -0
  119. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/ja.py +0 -0
  120. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/ja.pyi +0 -0
  121. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/ru.py +0 -0
  122. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/ru.pyi +0 -0
  123. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/zh_cn.py +0 -0
  124. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/zh_cn.pyi +0 -0
  125. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/zh_tw.py +0 -0
  126. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/i18n/locales/zh_tw.pyi +0 -0
  127. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/lifecycle.py +0 -0
  128. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/lifecycle.pyi +0 -0
  129. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/logger.py +0 -0
  130. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/logger.pyi +0 -0
  131. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/module.py +0 -0
  132. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/module.pyi +0 -0
  133. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/router.py +0 -0
  134. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/router.pyi +0 -0
  135. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/storage.py +0 -0
  136. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/Core/storage.pyi +0 -0
  137. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/__init__.py +0 -0
  138. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/__init__.pyi +0 -0
  139. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/__main__.py +0 -0
  140. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/__main__.pyi +0 -0
  141. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/finders/__init__.py +0 -0
  142. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/finders/__init__.pyi +0 -0
  143. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/finders/adapter.py +0 -0
  144. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/finders/adapter.pyi +0 -0
  145. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/finders/bases/__init__.py +0 -0
  146. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
  147. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/finders/bases/finder.py +0 -0
  148. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/finders/bases/finder.pyi +0 -0
  149. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/finders/module.py +0 -0
  150. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/finders/module.pyi +0 -0
  151. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/__init__.py +0 -0
  152. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/__init__.pyi +0 -0
  153. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/adapter.py +0 -0
  154. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/adapter.pyi +0 -0
  155. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/bases/__init__.py +0 -0
  156. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
  157. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/bases/loader.py +0 -0
  158. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
  159. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/module.py +0 -0
  160. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/module.pyi +0 -0
  161. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/strategy.py +0 -0
  162. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/loaders/strategy.pyi +0 -0
  163. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/runtime/__init__.py +0 -0
  164. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/runtime/__init__.pyi +0 -0
  165. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/runtime/config_schema.py +0 -0
  166. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/runtime/config_schema.pyi +0 -0
  167. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/runtime/context.py +0 -0
  168. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/runtime/context.pyi +0 -0
  169. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/runtime/exceptions.py +0 -0
  170. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/runtime/exceptions.pyi +0 -0
  171. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/runtime/frame_config.pyi +0 -0
  172. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/sdk.py +0 -0
  173. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/sdk.pyi +0 -0
  174. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/web_status/4xx.png +0 -0
  175. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/web_status/5xx.png +0 -0
  176. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/web_status/__init__.py +0 -0
  177. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/web_status/__init__.pyi +0 -0
  178. {erispulse-2.5.0.dev1 → erispulse-2.5.0.dev2}/src/ErisPulse/web_status/unknow.png +0 -0
@@ -0,0 +1,560 @@
1
+ Metadata-Version: 2.4
2
+ Name: ErisPulse
3
+ Version: 2.5.0.dev2
4
+ Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
+ Author-email: ErisDev <erisdev@88.com>
6
+ Maintainer-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
7
+ License: MIT License
8
+
9
+ Copyright (c) 2025-2026 ErisPulse
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
28
+ License-File: LICENSE
29
+ Keywords: async,asyncio,bot,bot-framework,chatbot,email,extensible,framework,instant-messaging,kook,matrix,modular,multi-platform,onebot,onebot12,qq,robot,sdk,telegram,yunhu
30
+ Classifier: Development Status :: 4 - Beta
31
+ Classifier: Framework :: AsyncIO
32
+ Classifier: Intended Audience :: Developers
33
+ Classifier: License :: OSI Approved :: MIT License
34
+ Classifier: Operating System :: OS Independent
35
+ Classifier: Programming Language :: Python :: 3
36
+ Classifier: Programming Language :: Python :: 3 :: Only
37
+ Classifier: Programming Language :: Python :: 3.10
38
+ Classifier: Programming Language :: Python :: 3.11
39
+ Classifier: Programming Language :: Python :: 3.12
40
+ Classifier: Programming Language :: Python :: 3.13
41
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
42
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
43
+ Classifier: Typing :: Typed
44
+ Requires-Python: >=3.10
45
+ Requires-Dist: aiohttp>=3.9.0
46
+ Requires-Dist: fastapi>=0.116.1
47
+ Requires-Dist: pip>=23.0
48
+ Requires-Dist: rich>=13.0.0
49
+ Requires-Dist: toml>=0.10.2
50
+ Requires-Dist: uvicorn>=0.30.0
51
+ Requires-Dist: websockets>=12.0
52
+ Provides-Extra: dev
53
+ Requires-Dist: pyclean>=3.6.0; extra == 'dev'
54
+ Requires-Dist: ruff>=0.1.7; extra == 'dev'
55
+ Provides-Extra: test
56
+ Requires-Dist: httpx>=0.24.0; extra == 'test'
57
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'test'
58
+ Requires-Dist: pytest-benchmark>=4.0.0; extra == 'test'
59
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
60
+ Requires-Dist: pytest-mock>=3.10.0; extra == 'test'
61
+ Requires-Dist: pytest-xdist>=3.0.0; extra == 'test'
62
+ Requires-Dist: pytest>=7.0.0; extra == 'test'
63
+ Description-Content-Type: text/markdown
64
+
65
+ <table>
66
+ <tr>
67
+ <td width="35%" valign="middle" align="center">
68
+
69
+ <img src=".github/assets/mascot-hero.png" width="320" alt="ErisPulse" />
70
+
71
+ </td>
72
+ <td valign="middle">
73
+
74
+ > **English** | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [Русский](README.ru.md)
75
+
76
+ > 🎉 **v2.5.0-dev.1 now supports multiple languages!** The framework core and CLI interface now have built-in support for Chinese (Simplified/Traditional), English, Japanese, and Russian, automatically switching based on your system language!
77
+
78
+ # ErisPulse
79
+
80
+ **Event-driven multi-platform robot development framework**
81
+
82
+ Based on the OneBot12 standard interface, write once, deploy across multiple platforms. A flexible plugin system, hot-reload support, and a complete developer toolchain, suitable for various scenarios from simple chatbots to complex automation systems.
83
+
84
+ > Supports Vibe Coding workflow, letting AI directly generate usable modules — [View](docs/en/quick-start.md)
85
+
86
+ [![PyPI](https://img.shields.io/pypi/v/ErisPulse?style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ErisPulse/)
87
+ [![Python](https://img.shields.io/badge/Python-3.10+-FFD43B?style=for-the-badge&logo=python&logoColor=blue)](https://pypi.org/project/ErisPulse/)
88
+ [![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https://hub.docker.com/r/erispulse/erispulse)
89
+ [![License](https://img.shields.io/badge/License-MIT-blue?style=for-the-badge)](https://github.com/ErisPulse/ErisPulse/blob/main/LICENSE)
90
+ [![Stars](https://img.shields.io/github/stars/ErisPulse/ErisPulse?style=for-the-badge&logo=github&color=brightgreen)](https://github.com/ErisPulse/ErisPulse)
91
+ [![Downloads](https://img.shields.io/pepy/dt/ErisPulse?style=for-the-badge&color=blue)](https://pypi.org/project/ErisPulse/)
92
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json&style=for-the-badge)](https://github.com/astral-sh/ruff)
93
+ [![Socket](https://img.shields.io/badge/Socket-Secure-2ea043?style=for-the-badge&logo=socket&logoColor=white)](https://socket.dev/pypi/package/erispulse)
94
+
95
+ [![Documentation](https://img.shields.io/badge/Documentation-erisdev.com-FF6B9D?style=for-the-badge&logo=bookstack&logoColor=white)](https://www.erisdev.com)
96
+ [![Module Market](https://img.shields.io/badge/Module%20Market-erisdev.com-C724B1?style=for-the-badge&logo=webpack&logoColor=white)](https://www.erisdev.com/#market)
97
+ [![Discussion](https://img.shields.io/badge/GitHub-Discussions-181717?style=for-the-badge&logo=github)](https://github.com/ErisPulse/ErisPulse/discussions)
98
+
99
+ </td>
100
+ </tr>
101
+ </table>
102
+
103
+ ---
104
+
105
+ <div align="center">
106
+
107
+ ### Core Features
108
+
109
+ </div>
110
+
111
+ <table>
112
+ <tr>
113
+ <td width="50%" align="center" valign="top">
114
+ <br/>
115
+
116
+ ### ⚡ Event-driven Architecture
117
+
118
+ A clear event model based on the OneBot12 standard, making message handling logic more intuitive and efficient
119
+
120
+ </td>
121
+ <td width="50%" align="center" valign="top">
122
+ <br/>
123
+
124
+ ### 🌐 Cross-platform Compatibility
125
+
126
+ Write plugin modules once and use them across all platforms, without repetitive development for different platforms
127
+
128
+ </td>
129
+ </tr>
130
+ <tr>
131
+ <td width="50%" align="center" valign="top">
132
+ <br/>
133
+
134
+ ### 🧩 Modular Design
135
+
136
+ A flexible plugin system, easy to extend and integrate, supporting hot-swappable module management
137
+
138
+ </td>
139
+ <td width="50%" align="center" valign="top">
140
+ <br/>
141
+
142
+ ### 🔄 Hot-reload Support
143
+
144
+ Reload code without restarting during development, greatly improving development iteration efficiency
145
+
146
+ </td>
147
+ </tr>
148
+ </table>
149
+
150
+ ---
151
+
152
+ ### Quick Start
153
+
154
+ #### One-click Installation Script (Recommended)
155
+
156
+ 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/Japanese/Russian/Traditional Chinese).
157
+
158
+ Windows (PowerShell):
159
+ ```powershell
160
+ irm https://get.erisdev.com/install.ps1 -OutFile install.ps1; powershell -ExecutionPolicy Bypass -File install.ps1
161
+ ```
162
+
163
+ macOS / Linux:
164
+ ```bash
165
+ curl -fsSL https://get.erisdev.com/install.sh -o install.sh && chmod +x install.sh && ./install.sh
166
+ ```
167
+
168
+ <table>
169
+ <tr>
170
+ <td align="center" width="50%">
171
+
172
+ **Docker Installation Demo**
173
+
174
+ <video src="https://github.com/user-attachments/assets/a367a466-4678-46a9-b101-073a86388ede" controls width="100%"></video>
175
+
176
+ </td>
177
+ <td align="center" width="50%">
178
+
179
+ **pip Installation Demo**
180
+
181
+ <video src="https://github.com/user-attachments/assets/a2df4009-dba6-411e-b79d-4454a168d063" controls width="100%"></video>
182
+
183
+ </td>
184
+ </tr>
185
+ </table>
186
+
187
+ #### Using Docker (Recommended)
188
+
189
+ ```bash
190
+ docker pull erispulse/erispulse:latest
191
+ ```
192
+
193
+ <details>
194
+ <summary>Unable to access Docker Hub?</summary>
195
+
196
+ If Docker Hub is inaccessible, you can use GitHub Container Registry:
197
+
198
+ ```bash
199
+ docker pull ghcr.io/erispulse/erispulse:latest
200
+ ```
201
+
202
+ When using the ghcr.io image, modify the `docker-compose.yml` file's image:
203
+ ```yaml
204
+ image: ghcr.io/erispulse/erispulse:latest
205
+ ```
206
+
207
+ </details>
208
+
209
+ <details>
210
+ <summary>Quick Start</summary>
211
+
212
+ ```bash
213
+ # Download docker-compose.yml
214
+ curl -O https://raw.githubusercontent.com/ErisPulse/ErisPulse/main/docker-compose.yml
215
+
216
+ # Set Dashboard login token and start
217
+ ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
218
+ ```
219
+
220
+ > The image includes the ErisPulse framework and Dashboard management panel, supporting `linux/amd64` and `linux/arm64` architectures.
221
+
222
+ After startup, visit `http://<host>:<port>/Dashboard`, and use the set token as the password to log in to the Dashboard management panel.
223
+
224
+ </details>
225
+
226
+ <details>
227
+ <summary>Using Pre-release Version (Dev)</summary>
228
+
229
+ Set `ERISPULSE_CHANNEL=dev` to use the pre-release version:
230
+
231
+ ```bash
232
+ # Method 1: Use environment variable (Recommended)
233
+ ERISPULSE_CHANNEL=dev ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
234
+
235
+ # Method 2: Build dev image
236
+ ERISPULSE_BUILD_TARGET=dev docker compose up -d --build
237
+ ```
238
+
239
+ To automatically update to the latest version at startup (regardless of stable or dev), explicitly set `ERISPULSE_UPDATE_ON_START=true`:
240
+
241
+ ```bash
242
+ ERISPULSE_CHANNEL=dev ERISPULSE_UPDATE_ON_START=true docker compose up -d
243
+ ```
244
+
245
+ You can also pull the pre-built dev image:
246
+
247
+ ```bash
248
+ docker pull erispulse/erispulse:dev
249
+ ```
250
+
251
+ </details>
252
+
253
+ <details>
254
+ <summary>Docker Environment Variables</summary>
255
+
256
+ | Variable | Default Value | Description |
257
+ |------|--------|------|
258
+ | `ERISPULSE_CHANNEL` | `stable` | Version channel: `stable` (stable version) or `dev` (pre-release version) |
259
+ | `ERISPULSE_UPDATE_ON_START` | `false` | Whether to automatically update to the latest version when the container starts (must be explicitly enabled) |
260
+ | `ERISPULSE_DASHBOARD_TOKEN` | empty | Dashboard login token |
261
+ | `ERISPULSE_PORT` | `8000` | Dashboard port mapping |
262
+ | `TZ` | `Asia/Shanghai` | Container timezone |
263
+
264
+ > Setting `ERISPULSE_UPDATE_ON_START=true` ensures that even if the image is outdated, the container will automatically fetch the latest version at startup.
265
+
266
+ </details>
267
+
268
+ #### 1Panel App Store
269
+
270
+ Install ErisPulse one-click via the [1Panel](https://1panel.cn) app store, see [ErisPulse-1Panel](https://github.com/ErisPulse/ErisPulse-1Panel).
271
+
272
+ ```bash
273
+ bash <(curl -sL https://get-1panel.erisdev.com/install.sh)
274
+ ```
275
+
276
+ #### Using pip Installation
277
+
278
+ ```bash
279
+ pip install ErisPulse
280
+ ```
281
+
282
+ > You can also use the one-click installation script above, which automatically detects the environment and guides configuration.
283
+
284
+ #### Running Effect
285
+
286
+ ##### Dashboard:
287
+
288
+ [![Live Demo](https://img.shields.io/badge/Live%20Demo-Dashboard-FF6B9D?style=for-the-badge&logo=github&logoColor=white)](https://dashdemo.erisdev.com/)
289
+
290
+ > 💡 Experience the live demo dashboard online: [DashDemo](https://dashdemo.erisdev.com/)
291
+
292
+ <table>
293
+ <tr>
294
+ <td width="50%">
295
+
296
+ <img src=".github/assets/docs/dashboard.png" alt="Dashboard Demo" />
297
+
298
+ </td>
299
+ <td width="50%">
300
+
301
+ <video src="https://github.com/user-attachments/assets/157191c4-9a84-433c-b311-0c57e3a21151" controls width="100%"></video>
302
+
303
+ </td>
304
+ </tr>
305
+ </table>
306
+
307
+
308
+ ##### Same code, multiple platform responses:
309
+
310
+ <table>
311
+ <tr>
312
+ <td align="center" width="33%">
313
+
314
+ **Kook**
315
+
316
+ <img src=".github/assets/demo-kook.png" alt="Kook Demo" />
317
+
318
+ </td>
319
+ <td align="center" width="33%">
320
+
321
+ **QQ**
322
+
323
+ <img src=".github/assets/demo-qq.png" alt="QQ Demo" />
324
+
325
+ </td>
326
+ <td align="center" width="33%">
327
+
328
+ **Yunhu**
329
+
330
+ <img src=".github/assets/demo-yunhu.png" alt="Yunhu Demo" />
331
+
332
+ </td>
333
+ </tr>
334
+ </table>
335
+
336
+ #### Initialize Project
337
+
338
+ ```bash
339
+ # Interactive initialization
340
+ epsdk init
341
+
342
+ # Quick initialization (specify project name)
343
+ epsdk init -q -n my_bot
344
+ ```
345
+
346
+ #### Create First Robot
347
+
348
+ Create `main.py` file:
349
+
350
+ <table>
351
+ <tr>
352
+ <td width="50%" valign="top">
353
+
354
+ **Command Handler**
355
+
356
+ ```python
357
+ from ErisPulse import sdk
358
+ from ErisPulse.Core.Event import command
359
+
360
+ @command("hello", help="Send greeting message")
361
+ async def hello_handler(event):
362
+ user_name = event.get_user_nickname() or "friend"
363
+ await event.reply(f"Hello, {user_name}!")
364
+
365
+ @command("ping", help="Test if the robot is online")
366
+ async def ping_handler(event):
367
+ await event.reply("Pong! The robot is running normally.")
368
+
369
+ if __name__ == "__main__":
370
+ import asyncio
371
+ asyncio.run(sdk.run(keep_running=True))
372
+ ```
373
+
374
+ </td>
375
+ <td width="50%" valign="top">
376
+
377
+ **Effect Explanation**
378
+
379
+ Send `/hello`
380
+
381
+ Robot replies: `Hello, {username}!`
382
+
383
+ ---
384
+
385
+ Send `/ping`
386
+
387
+ Robot replies: `Pong! The robot is running normally.`
388
+
389
+ ---
390
+
391
+ **Running Method**
392
+
393
+ ```bash
394
+ epsdk run main.py
395
+ # Or development mode
396
+ epsdk run main.py --reload
397
+ ```
398
+
399
+ </td>
400
+ </tr>
401
+ </table>
402
+
403
+ For more detailed instructions, please refer to:
404
+ - [Quick Start Guide](docs/en/quick-start.md)
405
+ - [Getting Started Guide](docs/en/getting-started.md)
406
+
407
+ #### Multi-turn Conversation Example
408
+
409
+ ErisPulse includes a powerful multi-turn conversation engine, making it easy to implement guided operations, information collection, and other interactive scenarios:
410
+
411
+ ```python
412
+ from ErisPulse.Core.Event import command, request
413
+
414
+ @command("register")
415
+ async def register_handler(event):
416
+ conv = event.conversation(timeout=60)
417
+
418
+ await conv.say("Welcome to register!")
419
+
420
+ # Multi-step collection of user information, with automatic validation
421
+ data = await conv.collect([
422
+ {"key": "name", "prompt": "Please enter your name"},
423
+ {"key": "age", "prompt": "Please enter your age",
424
+ "validator": lambda e: e.get_text().strip().isdigit(),
425
+ "retry_prompt": "Age must be a number, please re-enter"},
426
+ ])
427
+
428
+ if data and await conv.confirm(f"Confirm registration? Name: {data['name']}, Age: {data['age']}"):
429
+ # Use SendDSL to actively push notifications
430
+ await sdk.adapter.get(event.get_platform()).Send.To(
431
+ "user", event.get_user_id()
432
+ ).Text(f"Registration successful! Welcome {data['name']}")
433
+ # Or await event.reply("Registration successful!")
434
+
435
+ # Automatically handle friend requests
436
+ @request.on_friend_request()
437
+ async def handle_friend_request(event):
438
+ user_name = event.get_user_nickname() or event.get_user_id()
439
+
440
+ # Approve the request
441
+ result = await event.approve()
442
+ if result.get("status") == "ok":
443
+ await event.reply(f"Friend request approved automatically, welcome {user_name}")
444
+ ```
445
+
446
+ <details>
447
+ <summary>See more Conversation API (branching/joining/selection/persistence)</summary>
448
+
449
+ ```python
450
+ @command("quiz")
451
+ async def quiz_handler(event):
452
+ conv = event.conversation(timeout=30)
453
+
454
+ # Multiple-choice question
455
+ answer = await conv.choose("Who is the creator of Python?", [
456
+ "Guido van Rossum",
457
+ "James Gosling",
458
+ "Dennis Ritchie",
459
+ ])
460
+
461
+ if answer == 0:
462
+ await conv.say("Correct!")
463
+ elif answer is None:
464
+ await conv.say("Timed out, try again next time!")
465
+ else:
466
+ await conv.say("Incorrect, the correct answer is Guido van Rossum")
467
+
468
+ @command("menu")
469
+ async def menu_handler(event):
470
+ conv = event.conversation(timeout=60)
471
+
472
+ # Branching, build complex interaction flow
473
+ @conv.branch("main")
474
+ async def main_menu():
475
+ await conv.say("=== Main Menu ===\n1. Personal Information\n2. Settings\n3. Exit")
476
+ resp = await conv.wait()
477
+ if resp and resp.get_text().strip() == "1":
478
+ await conv.goto("profile")
479
+
480
+ @conv.branch("profile")
481
+ async def profile():
482
+ await conv.say("Name: Alice\n0. Return")
483
+ resp = await conv.wait()
484
+ if resp and resp.get_text().strip() == "0":
485
+ await conv.goto("main")
486
+
487
+ await conv.start()
488
+ ```
489
+
490
+ See [Conversation Multi-turn Dialogue](docs/en/advanced/conversation.md)
491
+
492
+ </details>
493
+
494
+ ---
495
+
496
+ ### Supported Adapters
497
+
498
+ We welcome your contributions to adapters!
499
+
500
+ | Adapter | Description |
501
+ |--------|------|
502
+ | <img src=".github/assets/adapter_logo/kook.svg" height="20" alt="Kook" /> [Kook](https://github.com/shanfishapp/ErisPulse-KookAdapter) | Kook (Kahei La) instant messaging platform |
503
+ | <img src=".github/assets/adapter_logo/matrix.svg" height="20" alt="Matrix" /> [Matrix](https://github.com/ErisPulse/ErisPulse-MatrixAdapter) | Matrix decentralized communication protocol |
504
+ | <img src=".github/assets/adapter_logo/onebot.png" height="20" alt="OneBot" /> [OneBot11](https://github.com/ErisPulse/ErisPulse-OneBot11Adapter) | OneBot v11 general robot protocol |
505
+ | <img src=".github/assets/adapter_logo/onebot.png" height="20" alt="OneBot" /> [OneBot12](https://github.com/ErisPulse/ErisPulse-OneBot12Adapter) | OneBot v12 standard protocol |
506
+ | <img src=".github/assets/adapter_logo/qqbot.svg" height="20" alt="QQ" /> [QQ](https://github.com/ErisPulse/ErisPulse-QQBotAdapter) | Official QQ robot platform |
507
+ | <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 |
508
+ | <img src=".github/assets/adapter_logo/telegram.svg" height="20" alt="Telegram" /> [Telegram](https://github.com/ErisPulse/ErisPulse-TelegramAdapter) | Global instant messaging platform |
509
+ | <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 |
510
+ | <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) |
511
+ | [Yunhu User](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) | Access adapter based on the Yunhu user protocol |
512
+ | [Flower Maple Cafe](https://github.com/ErisPulse/ErisPulse-Ideaura/) | Allons! \(・ω・) / |
513
+ | <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 |
514
+ | <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 |
515
+ | <img src=".github/assets/adapter_logo/wechatmp.png" height="20" alt="WechatMp" /> [WeChat Official Account](https://github.com/ErisPulse/ErisPulse-WechatMpAdapter) | Official WeChat Official Account platform |
516
+
517
+ See [Adapter Details](docs/en/platform-guide/README.md)
518
+
519
+ ---
520
+
521
+ ### Application Scenarios
522
+
523
+ <div align="center">
524
+
525
+ | Multi-platform Robot | Chat Assistant | Automation Tool | Message Forwarding |
526
+ |:---:|:---:|:---:|:---:|
527
+ | Deploy robots with the same functionality across multiple platforms | Integrate AI chat modules for entertainment and interaction | Message notifications, task management, data collection | Cross-platform message synchronization and forwarding |
528
+
529
+ </div>
530
+
531
+ ---
532
+
533
+ ### Contribution Guide
534
+
535
+ The health of the ErisPulse project still needs your contribution! We welcome various forms of contributions:
536
+
537
+ 1. **Report Issues** — Submit bug reports in [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues)
538
+ 2. **Feature Requests** — Propose new ideas through [Community Discussions](https://github.com/ErisPulse/ErisPulse/discussions)
539
+ 3. **Code Contributions** — Read [Code Style](docs/en/styleguide/) and [Contribution Guide](CONTRIBUTING.md) before submitting PRs
540
+ 4. **Documentation Improvements** — Help improve documentation and example code
541
+
542
+ [Join Community Discussions](https://github.com/ErisPulse/ErisPulse/discussions)
543
+
544
+ ---
545
+
546
+ ## Star History
547
+
548
+ [![Star History Chart](https://api.star-history.com/svg?repos=ErisPulse/ErisPulse&type=Date)](https://star-history.com/#ErisPulse/ErisPulse&Date)
549
+
550
+ ---
551
+
552
+ <div align="center">
553
+
554
+ ### Acknowledgments
555
+
556
+ <img src=".github/assets/thanks.png" width="200" alt="Thanks" />
557
+
558
+ This project is partially based on [sdkFrame](https://github.com/runoneall/sdkFrame) · The core adapter standardization layer is based on the [OneBot12 specification](https://12.onebot.dev/) · Thank you to all developers and authors who have contributed to the open-source community
559
+
560
+ </div>