echotools 2.3.83__tar.gz → 2.3.84__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 (240) hide show
  1. {echotools-2.3.83 → echotools-2.3.84}/PKG-INFO +144 -144
  2. {echotools-2.3.83 → echotools-2.3.84}/README.md +3 -3
  3. {echotools-2.3.83 → echotools-2.3.84}/docs/README.md +88 -88
  4. {echotools-2.3.83 → echotools-2.3.84}/pyproject.toml +1 -1
  5. {echotools-2.3.83 → echotools-2.3.84}/setup.cfg +8 -8
  6. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/__init__.py +215 -215
  7. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/cache/__init__.py +8 -8
  8. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/cache/list_cache.py +155 -155
  9. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/cache/memory_cache.py +74 -74
  10. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/config/__init__.py +23 -23
  11. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/config/base.py +155 -155
  12. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/config/center.py +285 -285
  13. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/config/center_notify.py +39 -39
  14. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/config/center_template.py +142 -142
  15. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/config/loader.py +138 -138
  16. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/errors/__init__.py +49 -49
  17. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/errors/base.py +32 -32
  18. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/errors/classify.py +79 -79
  19. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/errors/common.py +74 -74
  20. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/errors/http.py +126 -126
  21. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/ids/__init__.py +7 -7
  22. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/ids/generator.py +62 -62
  23. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/io/__init__.py +37 -37
  24. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/io/io_utils.py +81 -81
  25. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/logger/__init__.py +12 -12
  26. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/logger/manager.py +187 -187
  27. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/retry/__init__.py +12 -12
  28. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/retry/retry.py +171 -171
  29. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/compat.py +88 -88
  30. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/dispatch/__init__.py +21 -21
  31. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/dispatch/candidate.py +51 -51
  32. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/dispatch/dispatcher.py +233 -233
  33. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/dispatch/proxy_selector.py +154 -154
  34. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/dispatch/race.py +119 -119
  35. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/dispatch/selector.py +400 -400
  36. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/__init__.py +44 -44
  37. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/parsers/__init__.py +6 -6
  38. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/parsers/stream.py +839 -839
  39. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/parsers/xml_params.py +40 -40
  40. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/parsers/xml_parser.py +285 -285
  41. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/prompt/__init__.py +5 -5
  42. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/prompt/history.py +322 -322
  43. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/prompt/history_format.py +113 -113
  44. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/prompt/inject.py +192 -192
  45. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/prompt/prompt_helpers.py +259 -259
  46. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/prompt/templates.py +167 -167
  47. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/__init__.py +14 -14
  48. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/entml.py +361 -361
  49. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/entml_invoke.py +173 -178
  50. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/entml_patterns.py +464 -376
  51. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/entml_stream_json.py +445 -475
  52. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/entml_think/__init__.py +33 -33
  53. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/entml_think/core.py +230 -230
  54. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/entml_think/hist.py +168 -168
  55. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/entml_tool_blocks.py +311 -311
  56. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/entml_values.py +131 -93
  57. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/registry.py +111 -111
  58. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/shared/__init__.py +29 -29
  59. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/shared/coercion.py +289 -286
  60. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/shared/history_markup.py +327 -327
  61. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/shared/loop_detect.py +97 -97
  62. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/shared/normalization.py +181 -181
  63. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/shared/schema_render.py +126 -126
  64. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/shared/xml_helpers.py +56 -56
  65. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/lifecycle/__init__.py +8 -8
  66. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/lifecycle/manager.py +72 -72
  67. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/lifecycle/updater.py +197 -197
  68. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/lifecycle/updater_pull.py +33 -33
  69. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/process/__init__.py +10 -10
  70. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/process/port.py +193 -193
  71. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/protocol/__init__.py +19 -19
  72. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/protocol/base.py +135 -135
  73. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/conpty.py +246 -246
  74. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/local/__init__.py +6 -6
  75. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/local/core.py +318 -318
  76. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/local/proc.py +331 -331
  77. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/local/unix.py +195 -195
  78. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/local/win.py +199 -199
  79. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/session/__init__.py +20 -20
  80. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/session/base.py +353 -353
  81. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/session/client.py +155 -155
  82. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/tmux.py +105 -105
  83. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/__init__.py +38 -38
  84. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/charmap.py +148 -148
  85. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/spinner.py +342 -342
  86. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/mixins/__init__.py +15 -15
  87. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/mixins/uibase.py +195 -195
  88. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/mixins/uicmds.py +224 -224
  89. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/mixins/uiinteract.py +199 -199
  90. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/mixins/uioutput.py +304 -304
  91. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/mixins/uistream.py +144 -144
  92. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/ui_console.py +20 -20
  93. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/ui_io.py +27 -27
  94. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/ui_log.py +67 -67
  95. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/ui_platform.py +389 -389
  96. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/ui_text.py +368 -368
  97. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uicore/ui_types.py +246 -246
  98. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uilayout/ui_countdown.py +62 -62
  99. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uilayout/ui_layout.py +50 -50
  100. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uilayout/ui_misc.py +336 -336
  101. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uilayout/ui_panel.py +137 -137
  102. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uilayout/ui_table.py +205 -205
  103. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uilayout/ui_tree.py +146 -146
  104. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uiwidgets/ui_box.py +197 -197
  105. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uiwidgets/ui_editor.py +360 -360
  106. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uiwidgets/ui_progress.py +296 -296
  107. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uiwidgets/ui_select.py +199 -199
  108. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/uiwidgets/ui_stream.py +85 -85
  109. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/events/__init__.py +8 -8
  110. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/events/bus.py +104 -104
  111. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/events/event.py +31 -31
  112. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/spinner/__init__.py +24 -24
  113. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/spinner/spinner.py +324 -324
  114. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/spinner/spinner_color.py +98 -98
  115. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/tracing/__init__.py +28 -28
  116. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/tracing/context.py +63 -63
  117. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/tracing/span.py +135 -135
  118. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/tracing/tracer.py +97 -97
  119. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/watcher/__init__.py +7 -7
  120. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/watcher/file_watcher.py +110 -110
  121. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/__init__.py +37 -37
  122. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/application.py +120 -120
  123. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/components/sendbutton.js +64 -64
  124. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/components/sortablelist.js +104 -104
  125. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/components/textinput.js +185 -185
  126. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/inputbox.js +277 -277
  127. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/style.css +170 -170
  128. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/voicegif.js +1 -1
  129. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/middleware.py +129 -129
  130. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/utils.py +187 -187
  131. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/files/__init__.py +7 -7
  132. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/files/file_util.py +155 -155
  133. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/network/__init__.py +11 -11
  134. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/network/http_utils.py +68 -68
  135. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/plugin/__init__.py +9 -9
  136. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/plugin/base.py +41 -41
  137. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/plugin/discovery.py +179 -179
  138. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/plugin/registry.py +245 -245
  139. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/plugin/registry_ops.py +99 -99
  140. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/proxy/__init__.py +7 -7
  141. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/proxy/manager.py +268 -268
  142. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/runtime/__init__.py +7 -7
  143. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/runtime/collector.py +60 -60
  144. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/scheduler/__init__.py +7 -7
  145. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/scheduler/scheduler.py +69 -69
  146. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/sdk/__init__.py +7 -7
  147. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/plat/sdk/facade.py +251 -251
  148. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/version.py +15 -15
  149. {echotools-2.3.83 → echotools-2.3.84}/src/echotools.egg-info/PKG-INFO +144 -144
  150. {echotools-2.3.83 → echotools-2.3.84}/src/echotools.egg-info/SOURCES.txt +0 -1
  151. {echotools-2.3.83 → echotools-2.3.84}/src/tests/bench_import.py +14 -14
  152. {echotools-2.3.83 → echotools-2.3.84}/src/tests/conftest.py +19 -19
  153. {echotools-2.3.83 → echotools-2.3.84}/src/tests/fixtures/simulated_fake_history_markup_responses.py +484 -484
  154. {echotools-2.3.83 → echotools-2.3.84}/src/tests/fixtures/simulated_fault_thinking_responses.py +220 -220
  155. {echotools-2.3.83 → echotools-2.3.84}/src/tests/fixtures/simulated_llm_tool_responses.py +805 -805
  156. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_adversarial_stream_splits.py +144 -144
  157. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_cache_retry.py +128 -128
  158. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_completion.py +48 -48
  159. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_config.py +85 -85
  160. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_config_extended.py +45 -45
  161. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_console.py +26 -26
  162. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_coverage_core.py +515 -515
  163. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_dispatch.py +35 -35
  164. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_dispatch_extended.py +44 -44
  165. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_dispatch_race.py +55 -55
  166. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_agent_output_formats.py +143 -143
  167. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_bare_invoke_format.py +375 -375
  168. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_batch_stream_comprehensive.py +498 -498
  169. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_parser_comprehensive.py +654 -654
  170. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_protocol.py +1533 -1465
  171. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_stream_json.py +77 -77
  172. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_stream_json_exhaustive.py +268 -268
  173. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_thinking_history.py +71 -71
  174. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_tool_parse_leak.py +256 -256
  175. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_tool_pipeline.py +864 -851
  176. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_errors.py +45 -45
  177. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_errors_common.py +24 -24
  178. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_events.py +56 -56
  179. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_events_event.py +18 -18
  180. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_facade.py +33 -33
  181. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_fake_history_markup_batch.py +70 -70
  182. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_fake_history_markup_invoke_preserve.py +130 -130
  183. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_fake_history_markup_reply_protect.py +168 -168
  184. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_fake_history_markup_stream.py +151 -151
  185. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_fault_thinking_close_batch.py +86 -86
  186. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_fault_thinking_close_stream.py +149 -149
  187. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_fncall.py +99 -99
  188. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_fncall_stream_thinking.py +416 -416
  189. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_history_markup_filter.py +321 -321
  190. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_ids.py +25 -25
  191. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_imports.py +51 -51
  192. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_io.py +20 -20
  193. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_keys.py +27 -27
  194. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_lifecycle.py +34 -34
  195. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_logger.py +37 -37
  196. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_merge.py +26 -26
  197. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_model_branch_matrix.py +204 -204
  198. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_plugin.py +31 -31
  199. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_printstream.py +337 -337
  200. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_protocols.py +25 -25
  201. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_proxy.py +56 -56
  202. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_proxy_selector.py +27 -27
  203. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_runtime.py +25 -25
  204. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_scheduler.py +27 -27
  205. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_simulated_llm_tool_parse.py +171 -171
  206. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_stream_partial_json_parity.py +296 -229
  207. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_stream_realtime_parse.py +134 -134
  208. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_tracing.py +30 -30
  209. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_usage.py +37 -37
  210. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_web.py +48 -48
  211. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_web_broker.py +50 -50
  212. echotools-2.3.83/src/tests/_check_parity.py +0 -72
  213. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/config/merge.py +0 -0
  214. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/base/io/printstream.py +0 -0
  215. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/dispatch/usage.py +0 -0
  216. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/entml_think/parse.py +0 -0
  217. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/fncall/protocols/entml_tools.py +0 -0
  218. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/keys.py +0 -0
  219. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/__init__.py +0 -0
  220. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/sanitize.py +0 -0
  221. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/exec/terminal/ssh.py +0 -0
  222. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/console/ui.py +0 -0
  223. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/translate.py +0 -0
  224. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/broker.py +0 -0
  225. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/app.js +0 -0
  226. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/components/filezone.js +0 -0
  227. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/components/motionkit.js +0 -0
  228. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/components/sortablelist.css +0 -0
  229. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/components/voiceinput.js +0 -0
  230. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/fonts/inter-500.woff2 +0 -0
  231. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/fonts/inter-600.woff2 +0 -0
  232. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/fonts/inter400.woff2 +0 -0
  233. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/input_box/inputbox.css +0 -0
  234. {echotools-2.3.83 → echotools-2.3.84}/src/echotools/media/web/stats.py +0 -0
  235. {echotools-2.3.83 → echotools-2.3.84}/src/echotools.egg-info/dependency_links.txt +0 -0
  236. {echotools-2.3.83 → echotools-2.3.84}/src/echotools.egg-info/requires.txt +0 -0
  237. {echotools-2.3.83 → echotools-2.3.84}/src/echotools.egg-info/top_level.txt +0 -0
  238. {echotools-2.3.83 → echotools-2.3.84}/src/tests/fixtures/__init__.py +0 -0
  239. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_thinking_parse.py +0 -0
  240. {echotools-2.3.83 → echotools-2.3.84}/src/tests/test_entml_tools.py +0 -0
@@ -1,144 +1,144 @@
1
- Metadata-Version: 2.4
2
- Name: echotools
3
- Version: 2.3.83
4
- Summary: 通用基础设施 SDK:配置、日志、事件、调度、插件、协议、调用链
5
- Home-page: https://github.com/nichengfuben/echotools
6
- Author: nichengfuben
7
- License: MIT
8
- Project-URL: Homepage, https://github.com/nichengfuben/echotools
9
- Project-URL: Repository, https://github.com/nichengfuben/echotools
10
- Project-URL: Issues, https://github.com/nichengfuben/echotools/issues
11
- Classifier: Development Status :: 4 - Beta
12
- Classifier: Intended Audience :: Developers
13
- Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.8
15
- Classifier: Programming Language :: Python :: 3.9
16
- Classifier: Programming Language :: Python :: 3.10
17
- Classifier: Programming Language :: Python :: 3.11
18
- Classifier: Programming Language :: Python :: 3.12
19
- Classifier: Programming Language :: Python :: 3.13
20
- Classifier: Topic :: Software Development :: Libraries
21
- Requires-Python: >=3.8
22
- Description-Content-Type: text/markdown
23
- Requires-Dist: typing-extensions>=4.7.0
24
- Provides-Extra: toml
25
- Requires-Dist: tomlkit>=0.11.0; extra == "toml"
26
- Requires-Dist: tomli>=2.0.0; python_version < "3.11" and extra == "toml"
27
- Provides-Extra: watch
28
- Requires-Dist: watchdog>=3.0.0; extra == "watch"
29
- Provides-Extra: http
30
- Requires-Dist: aiohttp>=3.8.0; extra == "http"
31
- Provides-Extra: socks
32
- Requires-Dist: aiohttp-socks>=0.8.0; extra == "socks"
33
- Provides-Extra: ssh
34
- Requires-Dist: paramiko>=3.0.0; extra == "ssh"
35
- Provides-Extra: terminal
36
- Requires-Dist: pywinpty>=2.0.0; sys_platform == "win32" and extra == "terminal"
37
- Provides-Extra: console
38
- Requires-Dist: rich>=13.0; extra == "console"
39
- Requires-Dist: wcwidth>=0.2; extra == "console"
40
- Provides-Extra: all
41
- Requires-Dist: tomlkit>=0.11.0; extra == "all"
42
- Requires-Dist: tomli>=2.0.0; python_version < "3.11" and extra == "all"
43
- Requires-Dist: watchdog>=3.0.0; extra == "all"
44
- Requires-Dist: aiohttp>=3.8.0; extra == "all"
45
- Requires-Dist: aiohttp-socks>=0.8.0; extra == "all"
46
- Requires-Dist: paramiko>=3.0.0; extra == "all"
47
- Requires-Dist: pywinpty>=2.0.0; sys_platform == "win32" and extra == "all"
48
- Requires-Dist: rich>=13.0; extra == "all"
49
- Requires-Dist: wcwidth>=0.2; extra == "all"
50
- Provides-Extra: dev
51
- Requires-Dist: pytest>=7.4.0; extra == "dev"
52
- Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
53
- Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
54
- Requires-Dist: mypy>=1.5.0; extra == "dev"
55
- Requires-Dist: ruff>=0.4.0; extra == "dev"
56
-
57
- # echotools
58
-
59
- 通用基础设施 SDK:配置中心、日志、事件总线、调用链、任务调度、
60
- 插件框架、协议系统、自适应选择器,完全项目无关,兼容 Python 3.8–3.14。
61
-
62
- ## 安装
63
-
64
- ```bash
65
- # 核心(仅 typing-extensions)
66
- pip install echotools
67
-
68
- # 完整功能
69
- pip install echotools[all]
70
- ```
71
-
72
- ### 可选依赖
73
-
74
- | Extra | 用途 |
75
- |-------|------|
76
- | `toml` | TOML 配置读写 |
77
- | `watch` | watchdog 文件监视 |
78
- | `http` | aiohttp Web 层 |
79
- | `socks` | SOCKS 代理 |
80
- | `ssh` | SSH 终端 |
81
- | `terminal` | Windows ConPTY |
82
- | `all` | 全部可选依赖 |
83
- | `dev` | pytest, ruff, mypy |
84
-
85
- ### PyPI 重装(`uninstall-no-record-file`)
86
-
87
- 本地 `pip install -e .` 或中断的 wheel 安装可能留下无 `RECORD` 的元数据,导致
88
- `pip install --upgrade echotools` 报 `Cannot uninstall echotools None`。
89
-
90
- ```powershell
91
- # 在仓库根目录
92
- powershell -File scripts/reinstall_from_pypi.ps1 -Version 2.3.81
93
- ```
94
-
95
- 或手动:删除 `src/echotools.egg-info` 与 site-packages 里仅有 `direct_url.json` 的
96
- `echotools-*.dist-info`,再执行
97
- `pip install --force-reinstall --no-cache-dir echotools==2.3.81`。
98
-
99
- ## 快速开始
100
-
101
- ```python
102
- from echotools import EchoTools
103
-
104
- et = EchoTools(service_name="myapp")
105
- et.logger.configure(level="INFO", color=True)
106
- cfg = et.config
107
- cfg.load("config.toml")
108
-
109
- with et.tracer.trace("request") as trace:
110
- with et.tracer.span(trace, "db") as span:
111
- span.set_tag("query", "select 1")
112
-
113
- await et.shutdown()
114
- ```
115
-
116
- ## 能力总览
117
-
118
- | 模块 | 说明 |
119
- |------|------|
120
- | `ConfigCenter` | 点路径配置 + 热重载 + 类型绑定 |
121
- | `LoggerManager` | 调用链注入 + 颜色 + 轮转 |
122
- | `EventBus` | 同步/异步事件 |
123
- | `Tracer` | 轻量调用链 |
124
- | `TaskDispatcher` | 单发/竞速 + 贝叶斯自适应选择 |
125
- | `PluginRegistry` | 自动发现 + 热重载 |
126
- | `get_protocol` | XML/antml/original/bracket/nous 等 LLM 工具协议 |
127
- | `ProxyManager` | HTTP/HTTPS/SOCKS |
128
- | `AutoUpdater` | git 自动更新 |
129
- | `FileWatcher` | 轮询文件监视 |
130
-
131
- ## 开发
132
-
133
- ```bash
134
- pip install -e ".[dev,all]"
135
- make lint
136
- make test
137
- make cov
138
- ```
139
-
140
- 模块指南见 [docs/modules.md](docs/modules.md),API 参考见 [docs/api.md](docs/api.md)。
141
-
142
- ## 许可证
143
-
144
- MIT
1
+ Metadata-Version: 2.4
2
+ Name: echotools
3
+ Version: 2.3.84
4
+ Summary: 通用基础设施 SDK:配置、日志、事件、调度、插件、协议、调用链
5
+ Home-page: https://github.com/nichengfuben/echotools
6
+ Author: nichengfuben
7
+ License: MIT
8
+ Project-URL: Homepage, https://github.com/nichengfuben/echotools
9
+ Project-URL: Repository, https://github.com/nichengfuben/echotools
10
+ Project-URL: Issues, https://github.com/nichengfuben/echotools/issues
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.8
15
+ Classifier: Programming Language :: Python :: 3.9
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Software Development :: Libraries
21
+ Requires-Python: >=3.8
22
+ Description-Content-Type: text/markdown
23
+ Requires-Dist: typing-extensions>=4.7.0
24
+ Provides-Extra: toml
25
+ Requires-Dist: tomlkit>=0.11.0; extra == "toml"
26
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11" and extra == "toml"
27
+ Provides-Extra: watch
28
+ Requires-Dist: watchdog>=3.0.0; extra == "watch"
29
+ Provides-Extra: http
30
+ Requires-Dist: aiohttp>=3.8.0; extra == "http"
31
+ Provides-Extra: socks
32
+ Requires-Dist: aiohttp-socks>=0.8.0; extra == "socks"
33
+ Provides-Extra: ssh
34
+ Requires-Dist: paramiko>=3.0.0; extra == "ssh"
35
+ Provides-Extra: terminal
36
+ Requires-Dist: pywinpty>=2.0.0; sys_platform == "win32" and extra == "terminal"
37
+ Provides-Extra: console
38
+ Requires-Dist: rich>=13.0; extra == "console"
39
+ Requires-Dist: wcwidth>=0.2; extra == "console"
40
+ Provides-Extra: all
41
+ Requires-Dist: tomlkit>=0.11.0; extra == "all"
42
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11" and extra == "all"
43
+ Requires-Dist: watchdog>=3.0.0; extra == "all"
44
+ Requires-Dist: aiohttp>=3.8.0; extra == "all"
45
+ Requires-Dist: aiohttp-socks>=0.8.0; extra == "all"
46
+ Requires-Dist: paramiko>=3.0.0; extra == "all"
47
+ Requires-Dist: pywinpty>=2.0.0; sys_platform == "win32" and extra == "all"
48
+ Requires-Dist: rich>=13.0; extra == "all"
49
+ Requires-Dist: wcwidth>=0.2; extra == "all"
50
+ Provides-Extra: dev
51
+ Requires-Dist: pytest>=7.4.0; extra == "dev"
52
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
53
+ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
54
+ Requires-Dist: mypy>=1.5.0; extra == "dev"
55
+ Requires-Dist: ruff>=0.4.0; extra == "dev"
56
+
57
+ # echotools
58
+
59
+ 通用基础设施 SDK:配置中心、日志、事件总线、调用链、任务调度、
60
+ 插件框架、协议系统、自适应选择器,完全项目无关,兼容 Python 3.8–3.14。
61
+
62
+ ## 安装
63
+
64
+ ```bash
65
+ # 核心(仅 typing-extensions)
66
+ pip install echotools
67
+
68
+ # 完整功能
69
+ pip install echotools[all]
70
+ ```
71
+
72
+ ### 可选依赖
73
+
74
+ | Extra | 用途 |
75
+ |-------|------|
76
+ | `toml` | TOML 配置读写 |
77
+ | `watch` | watchdog 文件监视 |
78
+ | `http` | aiohttp Web 层 |
79
+ | `socks` | SOCKS 代理 |
80
+ | `ssh` | SSH 终端 |
81
+ | `terminal` | Windows ConPTY |
82
+ | `all` | 全部可选依赖 |
83
+ | `dev` | pytest, ruff, mypy |
84
+
85
+ ### PyPI 重装(`uninstall-no-record-file`)
86
+
87
+ 本地 `pip install -e .` 或中断的 wheel 安装可能留下无 `RECORD` 的元数据,导致
88
+ `pip install --upgrade echotools` 报 `Cannot uninstall echotools None`。
89
+
90
+ ```powershell
91
+ # 在仓库根目录
92
+ powershell -File scripts/reinstall_from_pypi.ps1 -Version 2.3.81
93
+ ```
94
+
95
+ 或手动:删除 `src/echotools.egg-info` 与 site-packages 里仅有 `direct_url.json` 的
96
+ `echotools-*.dist-info`,再执行
97
+ `pip install --force-reinstall --no-cache-dir echotools==2.3.81`。
98
+
99
+ ## 快速开始
100
+
101
+ ```python
102
+ from echotools import EchoTools
103
+
104
+ et = EchoTools(service_name="myapp")
105
+ et.logger.configure(level="INFO", color=True)
106
+ cfg = et.config
107
+ cfg.load("config.toml")
108
+
109
+ with et.tracer.trace("request") as trace:
110
+ with et.tracer.span(trace, "db") as span:
111
+ span.set_tag("query", "select 1")
112
+
113
+ await et.shutdown()
114
+ ```
115
+
116
+ ## 能力总览
117
+
118
+ | 模块 | 说明 |
119
+ |------|------|
120
+ | `ConfigCenter` | 点路径配置 + 热重载 + 类型绑定 |
121
+ | `LoggerManager` | 调用链注入 + 颜色 + 轮转 |
122
+ | `EventBus` | 同步/异步事件 |
123
+ | `Tracer` | 轻量调用链 |
124
+ | `TaskDispatcher` | 单发/竞速 + 贝叶斯自适应选择 |
125
+ | `PluginRegistry` | 自动发现 + 热重载 |
126
+ | `get_protocol` | XML/antml/original/bracket/nous 等 LLM 工具协议 |
127
+ | `ProxyManager` | HTTP/HTTPS/SOCKS |
128
+ | `AutoUpdater` | git 自动更新 |
129
+ | `FileWatcher` | 轮询文件监视 |
130
+
131
+ ## 开发
132
+
133
+ ```bash
134
+ pip install -e ".[dev,all]"
135
+ make lint
136
+ make test
137
+ make cov
138
+ ```
139
+
140
+ 模块指南见 [docs/modules.md](docs/modules.md),API 参考见 [docs/api.md](docs/api.md)。
141
+
142
+ ## 许可证
143
+
144
+ MIT
@@ -1,3 +1,3 @@
1
- # echotools
2
-
3
- Documentation: [docs/README.md](docs/README.md)
1
+ # echotools
2
+
3
+ Documentation: [docs/README.md](docs/README.md)
@@ -1,88 +1,88 @@
1
- # echotools
2
-
3
- 通用基础设施 SDK:配置中心、日志、事件总线、调用链、任务调度、
4
- 插件框架、协议系统、自适应选择器,完全项目无关,兼容 Python 3.8–3.14。
5
-
6
- ## 安装
7
-
8
- ```bash
9
- # 核心(仅 typing-extensions)
10
- pip install echotools
11
-
12
- # 完整功能
13
- pip install echotools[all]
14
- ```
15
-
16
- ### 可选依赖
17
-
18
- | Extra | 用途 |
19
- |-------|------|
20
- | `toml` | TOML 配置读写 |
21
- | `watch` | watchdog 文件监视 |
22
- | `http` | aiohttp Web 层 |
23
- | `socks` | SOCKS 代理 |
24
- | `ssh` | SSH 终端 |
25
- | `terminal` | Windows ConPTY |
26
- | `all` | 全部可选依赖 |
27
- | `dev` | pytest, ruff, mypy |
28
-
29
- ### PyPI 重装(`uninstall-no-record-file`)
30
-
31
- 本地 `pip install -e .` 或中断的 wheel 安装可能留下无 `RECORD` 的元数据,导致
32
- `pip install --upgrade echotools` 报 `Cannot uninstall echotools None`。
33
-
34
- ```powershell
35
- # 在仓库根目录
36
- powershell -File scripts/reinstall_from_pypi.ps1 -Version 2.3.81
37
- ```
38
-
39
- 或手动:删除 `src/echotools.egg-info` 与 site-packages 里仅有 `direct_url.json` 的
40
- `echotools-*.dist-info`,再执行
41
- `pip install --force-reinstall --no-cache-dir echotools==2.3.81`。
42
-
43
- ## 快速开始
44
-
45
- ```python
46
- from echotools import EchoTools
47
-
48
- et = EchoTools(service_name="myapp")
49
- et.logger.configure(level="INFO", color=True)
50
- cfg = et.config
51
- cfg.load("config.toml")
52
-
53
- with et.tracer.trace("request") as trace:
54
- with et.tracer.span(trace, "db") as span:
55
- span.set_tag("query", "select 1")
56
-
57
- await et.shutdown()
58
- ```
59
-
60
- ## 能力总览
61
-
62
- | 模块 | 说明 |
63
- |------|------|
64
- | `ConfigCenter` | 点路径配置 + 热重载 + 类型绑定 |
65
- | `LoggerManager` | 调用链注入 + 颜色 + 轮转 |
66
- | `EventBus` | 同步/异步事件 |
67
- | `Tracer` | 轻量调用链 |
68
- | `TaskDispatcher` | 单发/竞速 + 贝叶斯自适应选择 |
69
- | `PluginRegistry` | 自动发现 + 热重载 |
70
- | `get_protocol` | XML/antml/original/bracket/nous 等 LLM 工具协议 |
71
- | `ProxyManager` | HTTP/HTTPS/SOCKS |
72
- | `AutoUpdater` | git 自动更新 |
73
- | `FileWatcher` | 轮询文件监视 |
74
-
75
- ## 开发
76
-
77
- ```bash
78
- pip install -e ".[dev,all]"
79
- make lint
80
- make test
81
- make cov
82
- ```
83
-
84
- 模块指南见 [docs/modules.md](docs/modules.md),API 参考见 [docs/api.md](docs/api.md)。
85
-
86
- ## 许可证
87
-
88
- MIT
1
+ # echotools
2
+
3
+ 通用基础设施 SDK:配置中心、日志、事件总线、调用链、任务调度、
4
+ 插件框架、协议系统、自适应选择器,完全项目无关,兼容 Python 3.8–3.14。
5
+
6
+ ## 安装
7
+
8
+ ```bash
9
+ # 核心(仅 typing-extensions)
10
+ pip install echotools
11
+
12
+ # 完整功能
13
+ pip install echotools[all]
14
+ ```
15
+
16
+ ### 可选依赖
17
+
18
+ | Extra | 用途 |
19
+ |-------|------|
20
+ | `toml` | TOML 配置读写 |
21
+ | `watch` | watchdog 文件监视 |
22
+ | `http` | aiohttp Web 层 |
23
+ | `socks` | SOCKS 代理 |
24
+ | `ssh` | SSH 终端 |
25
+ | `terminal` | Windows ConPTY |
26
+ | `all` | 全部可选依赖 |
27
+ | `dev` | pytest, ruff, mypy |
28
+
29
+ ### PyPI 重装(`uninstall-no-record-file`)
30
+
31
+ 本地 `pip install -e .` 或中断的 wheel 安装可能留下无 `RECORD` 的元数据,导致
32
+ `pip install --upgrade echotools` 报 `Cannot uninstall echotools None`。
33
+
34
+ ```powershell
35
+ # 在仓库根目录
36
+ powershell -File scripts/reinstall_from_pypi.ps1 -Version 2.3.81
37
+ ```
38
+
39
+ 或手动:删除 `src/echotools.egg-info` 与 site-packages 里仅有 `direct_url.json` 的
40
+ `echotools-*.dist-info`,再执行
41
+ `pip install --force-reinstall --no-cache-dir echotools==2.3.81`。
42
+
43
+ ## 快速开始
44
+
45
+ ```python
46
+ from echotools import EchoTools
47
+
48
+ et = EchoTools(service_name="myapp")
49
+ et.logger.configure(level="INFO", color=True)
50
+ cfg = et.config
51
+ cfg.load("config.toml")
52
+
53
+ with et.tracer.trace("request") as trace:
54
+ with et.tracer.span(trace, "db") as span:
55
+ span.set_tag("query", "select 1")
56
+
57
+ await et.shutdown()
58
+ ```
59
+
60
+ ## 能力总览
61
+
62
+ | 模块 | 说明 |
63
+ |------|------|
64
+ | `ConfigCenter` | 点路径配置 + 热重载 + 类型绑定 |
65
+ | `LoggerManager` | 调用链注入 + 颜色 + 轮转 |
66
+ | `EventBus` | 同步/异步事件 |
67
+ | `Tracer` | 轻量调用链 |
68
+ | `TaskDispatcher` | 单发/竞速 + 贝叶斯自适应选择 |
69
+ | `PluginRegistry` | 自动发现 + 热重载 |
70
+ | `get_protocol` | XML/antml/original/bracket/nous 等 LLM 工具协议 |
71
+ | `ProxyManager` | HTTP/HTTPS/SOCKS |
72
+ | `AutoUpdater` | git 自动更新 |
73
+ | `FileWatcher` | 轮询文件监视 |
74
+
75
+ ## 开发
76
+
77
+ ```bash
78
+ pip install -e ".[dev,all]"
79
+ make lint
80
+ make test
81
+ make cov
82
+ ```
83
+
84
+ 模块指南见 [docs/modules.md](docs/modules.md),API 参考见 [docs/api.md](docs/api.md)。
85
+
86
+ ## 许可证
87
+
88
+ MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "echotools"
7
- version = "2.3.83"
7
+ version = "2.3.84"
8
8
  description = "通用基础设施 SDK:配置、日志、事件、调度、插件、协议、调用链"
9
9
  readme = "docs/README.md"
10
10
  requires-python = ">=3.8"
@@ -1,8 +1,8 @@
1
- [metadata]
2
- url = https://github.com/nichengfuben/echotools
3
- home_page = https://github.com/nichengfuben/echotools
4
-
5
- [egg_info]
6
- tag_build =
7
- tag_date = 0
8
-
1
+ [metadata]
2
+ url = https://github.com/nichengfuben/echotools
3
+ home_page = https://github.com/nichengfuben/echotools
4
+
5
+ [egg_info]
6
+ tag_build =
7
+ tag_date = 0
8
+