ErisPulse 2.6.2.dev1__tar.gz → 2.6.3.dev0__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 (198) hide show
  1. erispulse-2.6.3.dev0/PKG-INFO +290 -0
  2. erispulse-2.6.3.dev0/README.pypi.md +219 -0
  3. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/pyproject.toml +2 -2
  4. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/cli.py +55 -10
  5. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/cli.pyi +8 -0
  6. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/run.py +7 -1
  7. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/console.py +24 -0
  8. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/console.pyi +12 -0
  9. erispulse-2.6.3.dev0/src/ErisPulse/CLI/hints.py +135 -0
  10. erispulse-2.6.3.dev0/src/ErisPulse/CLI/hints.pyi +71 -0
  11. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/en.py +15 -0
  12. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/ja.py +15 -0
  13. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/ru.py +15 -0
  14. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/zh_cn.py +15 -0
  15. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/zh_tw.py +15 -0
  16. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/__init__.py +2 -1
  17. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/__init__.pyi +1 -1
  18. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/client.py +7 -0
  19. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/errors.py +11 -0
  20. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/kv_builder.py +5 -0
  21. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/router.py +7 -0
  22. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/send_builder.py +6 -0
  23. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/send_rules.py +6 -0
  24. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/websocket.py +6 -0
  25. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/adapter.py +94 -0
  26. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/client.py +7 -0
  27. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/config.py +7 -0
  28. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/constants.py +103 -0
  29. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/en.py +3 -0
  30. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/ja.py +3 -0
  31. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/ru.py +3 -0
  32. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/zh_cn.py +3 -0
  33. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/zh_tw.py +3 -0
  34. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/master.py +5 -0
  35. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/module.py +96 -0
  36. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/__init__.py +15 -0
  37. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/sdk.py +43 -2
  38. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/sdk.pyi +24 -1
  39. erispulse-2.6.2.dev1/PKG-INFO +0 -714
  40. erispulse-2.6.2.dev1/README.md +0 -643
  41. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/.gitignore +0 -0
  42. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/LICENSE +0 -0
  43. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/__init__.py +0 -0
  44. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/__init__.pyi +0 -0
  45. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/base.py +0 -0
  46. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/base.pyi +0 -0
  47. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/__init__.py +0 -0
  48. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
  49. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/create.py +0 -0
  50. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/create.pyi +0 -0
  51. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/init.py +0 -0
  52. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/init.pyi +0 -0
  53. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/install.py +0 -0
  54. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/install.pyi +0 -0
  55. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/language.py +0 -0
  56. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/language.pyi +0 -0
  57. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/list.py +0 -0
  58. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/list.pyi +0 -0
  59. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
  60. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
  61. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/run.pyi +0 -0
  62. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/self_update.py +0 -0
  63. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/self_update.pyi +0 -0
  64. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/types.py +0 -0
  65. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/types.pyi +0 -0
  66. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/uninstall.py +0 -0
  67. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/uninstall.pyi +0 -0
  68. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
  69. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
  70. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/__init__.py +0 -0
  71. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/__init__.pyi +0 -0
  72. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/__init__.py +0 -0
  73. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/__init__.pyi +0 -0
  74. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/en.pyi +0 -0
  75. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/ja.pyi +0 -0
  76. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/ru.pyi +0 -0
  77. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/zh_cn.pyi +0 -0
  78. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/i18n/locales/zh_tw.pyi +0 -0
  79. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/registry.py +0 -0
  80. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/registry.pyi +0 -0
  81. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/utils/__init__.py +0 -0
  82. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
  83. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/utils/display.py +0 -0
  84. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/utils/display.pyi +0 -0
  85. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/utils/file_watcher.py +0 -0
  86. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/utils/file_watcher.pyi +0 -0
  87. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/utils/package_manager.py +0 -0
  88. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/CLI/utils/package_manager.pyi +0 -0
  89. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/adapter.py +0 -0
  90. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/adapter.pyi +0 -0
  91. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/client.pyi +0 -0
  92. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/errors.pyi +0 -0
  93. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/kv_builder.pyi +0 -0
  94. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/manager.py +0 -0
  95. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
  96. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/module.py +0 -0
  97. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/module.pyi +0 -0
  98. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/router.pyi +0 -0
  99. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/send_builder.pyi +0 -0
  100. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/send_rules.pyi +0 -0
  101. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/storage.py +0 -0
  102. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/storage.pyi +0 -0
  103. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Bases/websocket.pyi +0 -0
  104. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/__init__.py +0 -0
  105. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
  106. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/base.py +0 -0
  107. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/base.pyi +0 -0
  108. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/command.py +0 -0
  109. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/command.pyi +0 -0
  110. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/message.py +0 -0
  111. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/message.pyi +0 -0
  112. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/message_builder.py +0 -0
  113. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/message_builder.pyi +0 -0
  114. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/meta.py +0 -0
  115. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/meta.pyi +0 -0
  116. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/notice.py +0 -0
  117. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/notice.pyi +0 -0
  118. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/request.py +0 -0
  119. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/request.pyi +0 -0
  120. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/session_type.py +0 -0
  121. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
  122. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/wrapper.py +0 -0
  123. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/Event/wrapper.pyi +0 -0
  124. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/__init__.py +0 -0
  125. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/__init__.pyi +0 -0
  126. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/adapter.pyi +0 -0
  127. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/assets/__init__.py +0 -0
  128. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/assets/__init__.pyi +0 -0
  129. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/assets/error.css +0 -0
  130. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/assets/error.html +0 -0
  131. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/assets/root.css +0 -0
  132. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/assets/root.html +0 -0
  133. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/client.pyi +0 -0
  134. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/config.pyi +0 -0
  135. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/constants.pyi +0 -0
  136. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/__init__.py +0 -0
  137. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/__init__.pyi +0 -0
  138. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/constants.py +0 -0
  139. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/constants.pyi +0 -0
  140. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/__init__.py +0 -0
  141. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/__init__.pyi +0 -0
  142. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/en.pyi +0 -0
  143. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/ja.pyi +0 -0
  144. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/ru.pyi +0 -0
  145. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/zh_cn.pyi +0 -0
  146. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/i18n/locales/zh_tw.pyi +0 -0
  147. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/lifecycle.py +0 -0
  148. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/lifecycle.pyi +0 -0
  149. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/logger.py +0 -0
  150. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/logger.pyi +0 -0
  151. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/master.pyi +0 -0
  152. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/module.pyi +0 -0
  153. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/router.py +0 -0
  154. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/router.pyi +0 -0
  155. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/storage.py +0 -0
  156. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/Core/storage.pyi +0 -0
  157. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/__init__.pyi +0 -0
  158. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/__main__.py +0 -0
  159. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/__main__.pyi +0 -0
  160. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/finders/__init__.py +0 -0
  161. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/finders/__init__.pyi +0 -0
  162. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/finders/adapter.py +0 -0
  163. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/finders/adapter.pyi +0 -0
  164. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/finders/bases/__init__.py +0 -0
  165. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
  166. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/finders/bases/finder.py +0 -0
  167. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/finders/bases/finder.pyi +0 -0
  168. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/finders/module.py +0 -0
  169. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/finders/module.pyi +0 -0
  170. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/__init__.py +0 -0
  171. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/__init__.pyi +0 -0
  172. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/adapter.py +0 -0
  173. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/adapter.pyi +0 -0
  174. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/bases/__init__.py +0 -0
  175. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
  176. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/bases/loader.py +0 -0
  177. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
  178. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/module.py +0 -0
  179. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/module.pyi +0 -0
  180. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/strategy.py +0 -0
  181. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/strategy.pyi +0 -0
  182. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/strict.py +0 -0
  183. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/loaders/strict.pyi +0 -0
  184. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/py.typed +0 -0
  185. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/__init__.py +0 -0
  186. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/__init__.pyi +0 -0
  187. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/config_schema.py +0 -0
  188. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/config_schema.pyi +0 -0
  189. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/context.py +0 -0
  190. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/context.pyi +0 -0
  191. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/exceptions.py +0 -0
  192. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/exceptions.pyi +0 -0
  193. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/frame_config.py +0 -0
  194. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/frame_config.pyi +0 -0
  195. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/hints.py +0 -0
  196. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/hints.pyi +0 -0
  197. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/tasks.py +0 -0
  198. {erispulse-2.6.2.dev1 → erispulse-2.6.3.dev0}/src/ErisPulse/runtime/tasks.pyi +0 -0
@@ -0,0 +1,290 @@
1
+ Metadata-Version: 2.4
2
+ Name: ErisPulse
3
+ Version: 2.6.3.dev0
4
+ Summary: Event-driven modular async bot framework — write once, deploy to any platform | 事件驱动的模块化异步机器人框架,一次编写,多平台部署
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: basedpyright>=1.20.0; extra == 'dev'
59
+ Requires-Dist: pyclean>=3.6.0; extra == 'dev'
60
+ Requires-Dist: ruff>=0.1.7; extra == 'dev'
61
+ Requires-Dist: typing-extensions>=4.7.0; (python_version < '3.11') and extra == 'dev'
62
+ Provides-Extra: test
63
+ Requires-Dist: httpx>=0.24.0; extra == 'test'
64
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'test'
65
+ Requires-Dist: pytest-benchmark>=4.0.0; extra == 'test'
66
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
67
+ Requires-Dist: pytest-mock>=3.10.0; extra == 'test'
68
+ Requires-Dist: pytest-xdist>=3.0.0; extra == 'test'
69
+ Requires-Dist: pytest>=7.0.0; extra == 'test'
70
+ Description-Content-Type: text/markdown
71
+
72
+ ![ErisPulse](https://raw.githubusercontent.com/ErisPulse/ErisPulse/main/.github/assets/mascot-hero.png)
73
+
74
+ # ErisPulse
75
+
76
+ **Write once, deploy on multiple platforms.**
77
+
78
+ An event-driven, multi-platform chatbot development framework based on the OneBot12 standard.
79
+
80
+ [![PyPI](https://img.shields.io/pypi/v/ErisPulse?style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ErisPulse/)
81
+ [![Python](https://img.shields.io/badge/Python-3.10+-FFD43B?style=for-the-badge&logo=python&logoColor=blue)](https://pypi.org/project/ErisPulse/)
82
+ [![License](https://img.shields.io/badge/License-MIT-blue?style=for-the-badge)](https://github.com/ErisPulse/ErisPulse/blob/main/LICENSE)
83
+ [![Docs](https://img.shields.io/badge/docs-erisdev.com-FF6B9D?style=for-the-badge&logo=bookstack&logoColor=white)](https://www.erisdev.com)
84
+ [![Stars](https://img.shields.io/github/stars/ErisPulse/ErisPulse?style=for-the-badge&logo=github&color=brightgreen)](https://github.com/ErisPulse/ErisPulse)
85
+ [![Downloads](https://img.shields.io/pepy/dt/ErisPulse?style=for-the-badge&color=blue)](https://pepy.tech/project/ErisPulse)
86
+ [![Discussions](https://img.shields.io/badge/GitHub-Discussions-181717?style=for-the-badge&logo=github)](https://github.com/ErisPulse/ErisPulse/discussions)
87
+ [![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https://hub.docker.com/r/erispulse/erispulse)
88
+
89
+ ---
90
+
91
+ ## Overview
92
+
93
+ ErisPulse is an event-driven, modular async framework for building chatbots that run on **multiple platforms from a single codebase**. It implements the [OneBot12](https://12.onebot.dev/) standard event model, so you write command handlers, conversation flows and message senders once — then deploy them to QQ, Telegram, Discord, Kook, Yunhu, Matrix, Email, WeChat and more without touching business logic.
94
+
95
+ It ships with a flexible plugin system, hot reload, a visual Dashboard, an AI Builder that turns natural-language prompts into modules, and the `epsdk` CLI scaffolding tool — suitable for everything from a simple chatbot to a complex automation pipeline.
96
+
97
+ ## Key Features
98
+
99
+ - **Event-driven architecture** — Clear event model based on OneBot12, making message handling intuitive and consistent across platforms.
100
+ - **Cross-platform compatibility** — Write handlers once, deploy to 15+ platforms without rewriting business logic.
101
+ - **Modular design** — Flexible plugin system with hot-plug module management and per-module configuration.
102
+ - **Hot reload** — Iterate on code during development without restarting the bot process.
103
+ - **Chainable SendDSL** — Express `@mention`, reply, retry, timeout, progress hook and bulk send as a single fluent chain.
104
+ - **Complete toolchain** — `epsdk` CLI, visual Dashboard, AI Builder and Module Market included out of the box.
105
+
106
+ ## Installation
107
+
108
+ ### Option 1 — pip (for library / module developers)
109
+
110
+ ```bash
111
+ pip install ErisPulse
112
+ ```
113
+
114
+ ### Option 2 — Docker (recommended for production)
115
+
116
+ ```bash
117
+ docker pull erispulse/erispulse:latest
118
+ ```
119
+
120
+ Quick start with `docker-compose.yml`:
121
+
122
+ ```bash
123
+ curl -O https://raw.githubusercontent.com/ErisPulse/ErisPulse/main/docker-compose.yml
124
+ ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
125
+ ```
126
+
127
+ The image bundles the ErisPulse framework **and** the Dashboard management panel, supporting `linux/amd64` and `linux/arm64`. After startup, visit `http://<host>:<port>/Dashboard` and log in with the token you set.
128
+
129
+ <details>
130
+ <summary>Docker Hub unavailable? Use GitHub Container Registry</summary>
131
+
132
+ ```bash
133
+ docker pull ghcr.io/erispulse/erispulse:latest
134
+ ```
135
+
136
+ And update the image in your `docker-compose.yml`:
137
+
138
+ ```yaml
139
+ image: ghcr.io/erispulse/erispulse:latest
140
+ ```
141
+
142
+ </details>
143
+
144
+ <details>
145
+ <summary>Docker environment variables</summary>
146
+
147
+ | Variable | Default | Description |
148
+ |------|--------|------|
149
+ | `ERISPULSE_CHANNEL` | `stable` | Version channel: `stable` or `dev` (pre-release) |
150
+ | `ERISPULSE_UPDATE_ON_START` | `false` | Auto-update to the latest version on container start |
151
+ | `ERISPULSE_DASHBOARD_TOKEN` | empty | Dashboard login token |
152
+ | `ERISPULSE_PORT` | `8000` | Dashboard port mapping |
153
+ | `TZ` | `Asia/Shanghai` | Container timezone |
154
+
155
+ </details>
156
+
157
+ ### Option 3 — One-click install script (auto-detects environment)
158
+
159
+ The installer detects Docker / Python / uv and guides you through the most suitable setup. Supports Chinese, English, Japanese, Russian and Traditional Chinese.
160
+
161
+ Windows (PowerShell):
162
+
163
+ ```powershell
164
+ irm https://get.erisdev.com/install.ps1 -OutFile install.ps1; powershell -ExecutionPolicy Bypass -File install.ps1
165
+ ```
166
+
167
+ macOS / Linux:
168
+
169
+ ```bash
170
+ curl -fsSL https://get.erisdev.com/install.sh -o install.sh && chmod +x install.sh && ./install.sh
171
+ ```
172
+
173
+ ## Quick Start
174
+
175
+ Initialize a new project:
176
+
177
+ ```bash
178
+ # Interactive initialization
179
+ epsdk init
180
+
181
+ # Quick initialization with a project name
182
+ epsdk init -q -n my_bot
183
+ ```
184
+
185
+ Create a `main.py` file:
186
+
187
+ ```python
188
+ from ErisPulse import sdk
189
+ from ErisPulse.Core.Event import command
190
+
191
+ @command("hello", help="Send greeting message")
192
+ async def hello_handler(event):
193
+ user_name = event.get_user_nickname() or "friend"
194
+ await event.reply(f"Hello, {user_name}!")
195
+
196
+ @command("ping", help="Test if the bot is online")
197
+ async def ping_handler(event):
198
+ await event.reply("Pong! The bot is running normally.")
199
+
200
+ if __name__ == "__main__":
201
+ import asyncio
202
+ asyncio.run(sdk.run(keep_running=True))
203
+ ```
204
+
205
+ Run it:
206
+
207
+ ```bash
208
+ epsdk run main.py
209
+ # Or in development mode with hot reload
210
+ epsdk run main.py --reload
211
+ ```
212
+
213
+ Now send `/hello` or `/ping` to the bot on any connected platform — the same handlers work everywhere.
214
+
215
+ For the full walkthrough (multi-turn conversations, request handlers, adapter configuration), see the [Quick Start guide](https://www.erisdev.com#docs).
216
+
217
+ ## The SendDSL — fluent message sending
218
+
219
+ Compose the entire send flow — `@mention`, reply, retry, timeout, progress hook and bulk dispatch — as one readable chain:
220
+
221
+ ```python
222
+ yunhu = sdk.adapter.get("yunhu")
223
+
224
+ # Single send: @user + reply + retry + timeout + success callback
225
+ await (yunhu.Send.To("group", "123")
226
+ .At("456").Reply("msg_789")
227
+ .Retry(3).Timeout(10)
228
+ .Hook(lambda r: print("Send successful!"))
229
+ .Text("Hello"))
230
+
231
+ # Bulk send: build multiple messages, then dispatch in one chain
232
+ results = await (yunhu.Send.To("user", "123")
233
+ .Build()
234
+ .Text("Notification 1")
235
+ .Image("pic.jpg")
236
+ .Retry(2)
237
+ .send_all())
238
+ ```
239
+
240
+ Supported chainable methods include `Hook` (success callback), `Retry` (failure retry), `Timeout` (timeout cancellation), `OnProgress` (progress monitoring), `Defer` (delayed send) and `Build` (batch construction).
241
+
242
+ > Full reference: [SendDSL documentation](https://www.erisdev.com#docs)
243
+
244
+ ## Supported Platforms
245
+
246
+ Officially maintained adapters (community contributions welcome):
247
+
248
+ - [Kook](https://github.com/shanfishapp/ErisPulse-KookAdapter) — instant messaging platform
249
+ - [Matrix](https://github.com/ErisPulse/ErisPulse-MatrixAdapter) — decentralized communication protocol
250
+ - [OneBot11](https://github.com/ErisPulse/ErisPulse-OneBot11Adapter) — universal OneBot v11 protocol
251
+ - [OneBot12](https://github.com/ErisPulse/ErisPulse-OneBot12Adapter) — OneBot v12 standard protocol
252
+ - [QQ Bot](https://github.com/ErisPulse/ErisPulse-QQBotAdapter) — official QQ bot platform
253
+ - [Telegram](https://github.com/ErisPulse/ErisPulse-TelegramAdapter) — global instant messaging
254
+ - [Discord](https://github.com/ErisPulse/ErisPulse-DiscordAdapter) — community communication platform
255
+ - [Yunhu](https://github.com/ErisPulse/ErisPulse-YunhuAdapter) / [Yunhu User](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) — enterprise IM
256
+ - [Email](https://github.com/ErisPulse/ErisPulse-EmailAdapter) — email protocol adapter
257
+ - [WeChat Official Account](https://github.com/ErisPulse/ErisPulse-WechatMpAdapter)
258
+ - [Webhook](https://github.com/ErisPulse/ErisPulse-WebhookAdapter) — HTTP bridge to any system
259
+ - [Sandbox](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) — in-browser debugging, no real platform needed
260
+ - [HuaFeng Coffee House](https://github.com/ErisPulse/ErisPulse-Ideaura/)
261
+
262
+ See the [adapter guide](https://www.erisdev.com#docs) for configuration details.
263
+
264
+ ## Ecosystem
265
+
266
+ - **Framework** — core runtime with a unified event & message model.
267
+ - **Dashboard** — visual management for plugins, logs and configuration. ([live demo](https://dashdemo.erisdev.com/))
268
+ - **AI Builder** — natural-language prompts → ready-to-use modules. ([try it](https://www.erisdev.com/#builder))
269
+ - **Module Market** — plug-and-play community plugins. ([browse](https://www.erisdev.com/#market))
270
+ - **CLI** — `epsdk` scaffolding, project init, run and reload.
271
+ - **Docker** — multi-architecture images at `erispulse/erispulse`.
272
+
273
+ ## Documentation & Community
274
+
275
+ - 📖 **Documentation & API reference:** [erisdev.com](https://www.erisdev.com)
276
+ - 💬 **GitHub Discussions:** [ErisPulse/ErisPulse/discussions](https://github.com/ErisPulse/ErisPulse/discussions)
277
+ - 📋 **Changelog:** [CHANGELOG.md](https://github.com/ErisPulse/ErisPulse/blob/main/CHANGELOG.md)
278
+ - 🤝 **Contributing:** [CONTRIBUTING.md](https://github.com/ErisPulse/ErisPulse/blob/main/CONTRIBUTING.md)
279
+ - 🐛 **Bug reports:** [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues)
280
+ - 🧠 **DeepWiki:** [deepwiki.com/ErisPulse/ErisPulse](https://deepwiki.com/ErisPulse/ErisPulse)
281
+
282
+ Chat with us on:
283
+
284
+ - Telegram: <https://t.me/ErisPulse>
285
+ - QQ Group: <https://qm.qq.com/q/TOwnCmypcy>
286
+ - Yunhu Group: <https://yhfx.jwznb.com/share?key=VWJL4fTWXepa&ts=1781889199>
287
+
288
+ ---
289
+
290
+ **Why ErisPulse?** Because platform differences should never be your bottleneck — focus on business logic, and let the framework handle the rest. Write once, deploy everywhere.
@@ -0,0 +1,219 @@
1
+ ![ErisPulse](https://raw.githubusercontent.com/ErisPulse/ErisPulse/main/.github/assets/mascot-hero.png)
2
+
3
+ # ErisPulse
4
+
5
+ **Write once, deploy on multiple platforms.**
6
+
7
+ An event-driven, multi-platform chatbot development framework based on the OneBot12 standard.
8
+
9
+ [![PyPI](https://img.shields.io/pypi/v/ErisPulse?style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ErisPulse/)
10
+ [![Python](https://img.shields.io/badge/Python-3.10+-FFD43B?style=for-the-badge&logo=python&logoColor=blue)](https://pypi.org/project/ErisPulse/)
11
+ [![License](https://img.shields.io/badge/License-MIT-blue?style=for-the-badge)](https://github.com/ErisPulse/ErisPulse/blob/main/LICENSE)
12
+ [![Docs](https://img.shields.io/badge/docs-erisdev.com-FF6B9D?style=for-the-badge&logo=bookstack&logoColor=white)](https://www.erisdev.com)
13
+ [![Stars](https://img.shields.io/github/stars/ErisPulse/ErisPulse?style=for-the-badge&logo=github&color=brightgreen)](https://github.com/ErisPulse/ErisPulse)
14
+ [![Downloads](https://img.shields.io/pepy/dt/ErisPulse?style=for-the-badge&color=blue)](https://pepy.tech/project/ErisPulse)
15
+ [![Discussions](https://img.shields.io/badge/GitHub-Discussions-181717?style=for-the-badge&logo=github)](https://github.com/ErisPulse/ErisPulse/discussions)
16
+ [![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https://hub.docker.com/r/erispulse/erispulse)
17
+
18
+ ---
19
+
20
+ ## Overview
21
+
22
+ ErisPulse is an event-driven, modular async framework for building chatbots that run on **multiple platforms from a single codebase**. It implements the [OneBot12](https://12.onebot.dev/) standard event model, so you write command handlers, conversation flows and message senders once — then deploy them to QQ, Telegram, Discord, Kook, Yunhu, Matrix, Email, WeChat and more without touching business logic.
23
+
24
+ It ships with a flexible plugin system, hot reload, a visual Dashboard, an AI Builder that turns natural-language prompts into modules, and the `epsdk` CLI scaffolding tool — suitable for everything from a simple chatbot to a complex automation pipeline.
25
+
26
+ ## Key Features
27
+
28
+ - **Event-driven architecture** — Clear event model based on OneBot12, making message handling intuitive and consistent across platforms.
29
+ - **Cross-platform compatibility** — Write handlers once, deploy to 15+ platforms without rewriting business logic.
30
+ - **Modular design** — Flexible plugin system with hot-plug module management and per-module configuration.
31
+ - **Hot reload** — Iterate on code during development without restarting the bot process.
32
+ - **Chainable SendDSL** — Express `@mention`, reply, retry, timeout, progress hook and bulk send as a single fluent chain.
33
+ - **Complete toolchain** — `epsdk` CLI, visual Dashboard, AI Builder and Module Market included out of the box.
34
+
35
+ ## Installation
36
+
37
+ ### Option 1 — pip (for library / module developers)
38
+
39
+ ```bash
40
+ pip install ErisPulse
41
+ ```
42
+
43
+ ### Option 2 — Docker (recommended for production)
44
+
45
+ ```bash
46
+ docker pull erispulse/erispulse:latest
47
+ ```
48
+
49
+ Quick start with `docker-compose.yml`:
50
+
51
+ ```bash
52
+ curl -O https://raw.githubusercontent.com/ErisPulse/ErisPulse/main/docker-compose.yml
53
+ ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
54
+ ```
55
+
56
+ The image bundles the ErisPulse framework **and** the Dashboard management panel, supporting `linux/amd64` and `linux/arm64`. After startup, visit `http://<host>:<port>/Dashboard` and log in with the token you set.
57
+
58
+ <details>
59
+ <summary>Docker Hub unavailable? Use GitHub Container Registry</summary>
60
+
61
+ ```bash
62
+ docker pull ghcr.io/erispulse/erispulse:latest
63
+ ```
64
+
65
+ And update the image in your `docker-compose.yml`:
66
+
67
+ ```yaml
68
+ image: ghcr.io/erispulse/erispulse:latest
69
+ ```
70
+
71
+ </details>
72
+
73
+ <details>
74
+ <summary>Docker environment variables</summary>
75
+
76
+ | Variable | Default | Description |
77
+ |------|--------|------|
78
+ | `ERISPULSE_CHANNEL` | `stable` | Version channel: `stable` or `dev` (pre-release) |
79
+ | `ERISPULSE_UPDATE_ON_START` | `false` | Auto-update to the latest version on container start |
80
+ | `ERISPULSE_DASHBOARD_TOKEN` | empty | Dashboard login token |
81
+ | `ERISPULSE_PORT` | `8000` | Dashboard port mapping |
82
+ | `TZ` | `Asia/Shanghai` | Container timezone |
83
+
84
+ </details>
85
+
86
+ ### Option 3 — One-click install script (auto-detects environment)
87
+
88
+ The installer detects Docker / Python / uv and guides you through the most suitable setup. Supports Chinese, English, Japanese, Russian and Traditional Chinese.
89
+
90
+ Windows (PowerShell):
91
+
92
+ ```powershell
93
+ irm https://get.erisdev.com/install.ps1 -OutFile install.ps1; powershell -ExecutionPolicy Bypass -File install.ps1
94
+ ```
95
+
96
+ macOS / Linux:
97
+
98
+ ```bash
99
+ curl -fsSL https://get.erisdev.com/install.sh -o install.sh && chmod +x install.sh && ./install.sh
100
+ ```
101
+
102
+ ## Quick Start
103
+
104
+ Initialize a new project:
105
+
106
+ ```bash
107
+ # Interactive initialization
108
+ epsdk init
109
+
110
+ # Quick initialization with a project name
111
+ epsdk init -q -n my_bot
112
+ ```
113
+
114
+ Create a `main.py` file:
115
+
116
+ ```python
117
+ from ErisPulse import sdk
118
+ from ErisPulse.Core.Event import command
119
+
120
+ @command("hello", help="Send greeting message")
121
+ async def hello_handler(event):
122
+ user_name = event.get_user_nickname() or "friend"
123
+ await event.reply(f"Hello, {user_name}!")
124
+
125
+ @command("ping", help="Test if the bot is online")
126
+ async def ping_handler(event):
127
+ await event.reply("Pong! The bot is running normally.")
128
+
129
+ if __name__ == "__main__":
130
+ import asyncio
131
+ asyncio.run(sdk.run(keep_running=True))
132
+ ```
133
+
134
+ Run it:
135
+
136
+ ```bash
137
+ epsdk run main.py
138
+ # Or in development mode with hot reload
139
+ epsdk run main.py --reload
140
+ ```
141
+
142
+ Now send `/hello` or `/ping` to the bot on any connected platform — the same handlers work everywhere.
143
+
144
+ For the full walkthrough (multi-turn conversations, request handlers, adapter configuration), see the [Quick Start guide](https://www.erisdev.com#docs).
145
+
146
+ ## The SendDSL — fluent message sending
147
+
148
+ Compose the entire send flow — `@mention`, reply, retry, timeout, progress hook and bulk dispatch — as one readable chain:
149
+
150
+ ```python
151
+ yunhu = sdk.adapter.get("yunhu")
152
+
153
+ # Single send: @user + reply + retry + timeout + success callback
154
+ await (yunhu.Send.To("group", "123")
155
+ .At("456").Reply("msg_789")
156
+ .Retry(3).Timeout(10)
157
+ .Hook(lambda r: print("Send successful!"))
158
+ .Text("Hello"))
159
+
160
+ # Bulk send: build multiple messages, then dispatch in one chain
161
+ results = await (yunhu.Send.To("user", "123")
162
+ .Build()
163
+ .Text("Notification 1")
164
+ .Image("pic.jpg")
165
+ .Retry(2)
166
+ .send_all())
167
+ ```
168
+
169
+ Supported chainable methods include `Hook` (success callback), `Retry` (failure retry), `Timeout` (timeout cancellation), `OnProgress` (progress monitoring), `Defer` (delayed send) and `Build` (batch construction).
170
+
171
+ > Full reference: [SendDSL documentation](https://www.erisdev.com#docs)
172
+
173
+ ## Supported Platforms
174
+
175
+ Officially maintained adapters (community contributions welcome):
176
+
177
+ - [Kook](https://github.com/shanfishapp/ErisPulse-KookAdapter) — instant messaging platform
178
+ - [Matrix](https://github.com/ErisPulse/ErisPulse-MatrixAdapter) — decentralized communication protocol
179
+ - [OneBot11](https://github.com/ErisPulse/ErisPulse-OneBot11Adapter) — universal OneBot v11 protocol
180
+ - [OneBot12](https://github.com/ErisPulse/ErisPulse-OneBot12Adapter) — OneBot v12 standard protocol
181
+ - [QQ Bot](https://github.com/ErisPulse/ErisPulse-QQBotAdapter) — official QQ bot platform
182
+ - [Telegram](https://github.com/ErisPulse/ErisPulse-TelegramAdapter) — global instant messaging
183
+ - [Discord](https://github.com/ErisPulse/ErisPulse-DiscordAdapter) — community communication platform
184
+ - [Yunhu](https://github.com/ErisPulse/ErisPulse-YunhuAdapter) / [Yunhu User](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) — enterprise IM
185
+ - [Email](https://github.com/ErisPulse/ErisPulse-EmailAdapter) — email protocol adapter
186
+ - [WeChat Official Account](https://github.com/ErisPulse/ErisPulse-WechatMpAdapter)
187
+ - [Webhook](https://github.com/ErisPulse/ErisPulse-WebhookAdapter) — HTTP bridge to any system
188
+ - [Sandbox](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) — in-browser debugging, no real platform needed
189
+ - [HuaFeng Coffee House](https://github.com/ErisPulse/ErisPulse-Ideaura/)
190
+
191
+ See the [adapter guide](https://www.erisdev.com#docs) for configuration details.
192
+
193
+ ## Ecosystem
194
+
195
+ - **Framework** — core runtime with a unified event & message model.
196
+ - **Dashboard** — visual management for plugins, logs and configuration. ([live demo](https://dashdemo.erisdev.com/))
197
+ - **AI Builder** — natural-language prompts → ready-to-use modules. ([try it](https://www.erisdev.com/#builder))
198
+ - **Module Market** — plug-and-play community plugins. ([browse](https://www.erisdev.com/#market))
199
+ - **CLI** — `epsdk` scaffolding, project init, run and reload.
200
+ - **Docker** — multi-architecture images at `erispulse/erispulse`.
201
+
202
+ ## Documentation & Community
203
+
204
+ - 📖 **Documentation & API reference:** [erisdev.com](https://www.erisdev.com)
205
+ - 💬 **GitHub Discussions:** [ErisPulse/ErisPulse/discussions](https://github.com/ErisPulse/ErisPulse/discussions)
206
+ - 📋 **Changelog:** [CHANGELOG.md](https://github.com/ErisPulse/ErisPulse/blob/main/CHANGELOG.md)
207
+ - 🤝 **Contributing:** [CONTRIBUTING.md](https://github.com/ErisPulse/ErisPulse/blob/main/CONTRIBUTING.md)
208
+ - 🐛 **Bug reports:** [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues)
209
+ - 🧠 **DeepWiki:** [deepwiki.com/ErisPulse/ErisPulse](https://deepwiki.com/ErisPulse/ErisPulse)
210
+
211
+ Chat with us on:
212
+
213
+ - Telegram: <https://t.me/ErisPulse>
214
+ - QQ Group: <https://qm.qq.com/q/TOwnCmypcy>
215
+ - Yunhu Group: <https://yhfx.jwznb.com/share?key=VWJL4fTWXepa&ts=1781889199>
216
+
217
+ ---
218
+
219
+ **Why ErisPulse?** Because platform differences should never be your bottleneck — focus on business logic, and let the framework handle the rest. Write once, deploy everywhere.
@@ -4,9 +4,9 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ErisPulse"
7
- version = "2.6.2-dev.1"
7
+ version = "2.6.3-dev.0"
8
8
  description = "Event-driven modular async bot framework — write once, deploy to any platform | 事件驱动的模块化异步机器人框架,一次编写,多平台部署"
9
- readme = "README.md"
9
+ readme = "README.pypi.md"
10
10
  requires-python = ">=3.10"
11
11
  license = { file = "LICENSE" }
12
12
 
@@ -149,6 +149,43 @@ class CLI:
149
149
  )
150
150
  )
151
151
 
152
+ def _print_quickstart(self) -> None:
153
+ """
154
+ 打印 Quick Start 面板
155
+
156
+ 在 ``epsdk`` 不带任何子命令时输出,帮助新用户在 30 秒内看到
157
+ 三步走路径(安装 / 创建项目 / 运行),降低首次使用门槛。
158
+ """
159
+ steps = [
160
+ (
161
+ i18n.t("cli.run.quickstart.step1_label"),
162
+ i18n.t("cli.run.quickstart.step1_cmd"),
163
+ ),
164
+ (
165
+ i18n.t("cli.run.quickstart.step2_label"),
166
+ i18n.t("cli.run.quickstart.step2_cmd"),
167
+ ),
168
+ (
169
+ i18n.t("cli.run.quickstart.step3_label"),
170
+ i18n.t("cli.run.quickstart.step3_cmd"),
171
+ ),
172
+ ]
173
+ lines: list[str] = []
174
+ for idx, (label, cmd) in enumerate(steps, start=1):
175
+ lines.append(f"[bold]{idx}. {label}[/] [cmd]{cmd}[/]")
176
+ lines.append("")
177
+ lines.append(f"[dim]{i18n.t('cli.run.quickstart.docs_hint')}[/]")
178
+ lines.append(f"[dim]{i18n.t('cli.run.quickstart.run_help_hint')}[/]")
179
+
180
+ console.print(
181
+ Panel(
182
+ "\n".join(lines),
183
+ title=f"[title]{i18n.t('cli.run.quickstart.title')}[/]",
184
+ subtitle=i18n.t("cli.run.quickstart.subtitle"),
185
+ border_style="info",
186
+ )
187
+ )
188
+
152
189
  def _check_command_typo(self) -> None:
153
190
  """
154
191
  在 argparse 解析之前检查命令拼写
@@ -174,23 +211,24 @@ class CLI:
174
211
  return
175
212
 
176
213
  # 命令无效,给出拼写建议(前缀加成确保 ins → install 而非 list)
177
- from ..runtime.hints import best_match_with_prefix
214
+ from .hints import best_match_with_prefix
178
215
 
179
216
  print_banner()
180
217
  suggestion = best_match_with_prefix(
181
218
  cmd, canonical_names, cutoff=0.5
182
219
  )
183
220
 
184
- console.print(
185
- f"[error]{i18n.t('cli.run.unknown_command', command=cmd)}[/]"
186
- )
187
221
  if suggestion:
188
- console.print(
189
- f"[hint]{i18n.t('cli.run.did_you_mean', name=suggestion)}[/]"
222
+ from .console import print_suggestion
223
+
224
+ print_suggestion(
225
+ title=i18n.t("cli.run.unknown_command", command=cmd),
226
+ suggestions=[f"epsdk {suggestion} --help"],
190
227
  )
191
- console.print()
192
- console.print(f" [dim]epsdk {suggestion} --help[/]")
193
228
  else:
229
+ console.print(
230
+ f"[error]{i18n.t('cli.run.unknown_command', command=cmd)}[/]"
231
+ )
194
232
  self.parser.print_help()
195
233
  sys.exit(1)
196
234
 
@@ -258,12 +296,13 @@ class CLI:
258
296
  self._print_version()
259
297
  return
260
298
 
261
- # 没有指定命令时显示帮助
299
+ # 没有指定命令时显示 Quick Start + 帮助
262
300
  if not args.command:
263
301
  if unknown:
264
302
  console.print(
265
303
  f"[warning]{i18n.t('cli.run.unknown_args', args=' '.join(unknown))}[/]"
266
304
  )
305
+ self._print_quickstart()
267
306
  self.parser.print_help()
268
307
  return
269
308
 
@@ -289,7 +328,7 @@ class CLI:
289
328
  command.execute(args)
290
329
  else:
291
330
  # 拼写建议:检查是否输入了与已知命令相似的名称
292
- from ..runtime.hints import best_match_with_prefix
331
+ from .hints import best_match_with_prefix
293
332
 
294
333
  suggestion = best_match_with_prefix(
295
334
  args.command, self.registry.list_all(), cutoff=0.5
@@ -309,6 +348,12 @@ class CLI:
309
348
  sys.exit(1)
310
349
  except Exception as e:
311
350
  console.print(f"[error]{i18n.t('cli.run.exec_error', error=e)}[/]")
351
+ # 场景化友好提示:根据异常类型给出下一步建议
352
+ from .hints import suggest_for_exception
353
+
354
+ hint_key = suggest_for_exception(e)
355
+ if hint_key:
356
+ console.print(f"[hint]{i18n.t(hint_key)}[/]")
312
357
  if args.verbose >= 1:
313
358
  console.print(traceback.format_exc())
314
359
  sys.exit(1)
@@ -55,6 +55,14 @@ class CLI:
55
55
  打印版本信息
56
56
  """
57
57
  ...
58
+ def _print_quickstart(self) -> None:
59
+ """
60
+ 打印 Quick Start 面板
61
+
62
+ 在 ``epsdk`` 不带任何子命令时输出,帮助新用户在 30 秒内看到
63
+ 三步走路径(安装 / 创建项目 / 运行),降低首次使用门槛。
64
+ """
65
+ ...
58
66
  def _check_command_typo(self) -> None:
59
67
  """
60
68
  在 argparse 解析之前检查命令拼写
@@ -110,10 +110,16 @@ class RunCommand(Command):
110
110
 
111
111
  if script:
112
112
  if not Path(script).exists():
113
+ # 列出当前目录的 .py 文件作为上下文参考
114
+ py_files = sorted(Path().glob("*.py"))
115
+ file_list = ", ".join(f.name for f in py_files[:5]) if py_files else None
116
+ hint_text = i18n.t("cli.run.use_init")
117
+ if file_list:
118
+ hint_text += " " + i18n.t("cli.run.available_scripts", files=file_list)
113
119
  console.print(
114
120
  f"[error]{i18n.t('cli.run.script_not_found', script=script)}[/]"
115
121
  )
116
- console.print(f"[info]{i18n.t('cli.run.use_init')}[/]")
122
+ console.print(f"[info]{hint_text}[/]")
117
123
  return
118
124
  if Path(script).is_dir():
119
125
  console.print(