echotools 2.3.81__tar.gz → 2.3.82__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.
- {echotools-2.3.81 → echotools-2.3.82}/PKG-INFO +15 -1
- {echotools-2.3.81 → echotools-2.3.82}/docs/README.md +14 -0
- {echotools-2.3.81 → echotools-2.3.82}/pyproject.toml +1 -1
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_stream_json.py +5 -2
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools.egg-info/PKG-INFO +15 -1
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_stream_partial_json_parity.py +54 -0
- {echotools-2.3.81 → echotools-2.3.82}/README.md +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/setup.cfg +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/cache/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/cache/list_cache.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/cache/memory_cache.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/config/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/config/base.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/config/center.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/config/center_notify.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/config/center_template.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/config/loader.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/config/merge.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/errors/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/errors/base.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/errors/classify.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/errors/common.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/errors/http.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/ids/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/ids/generator.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/io/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/io/io_utils.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/io/printstream.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/logger/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/logger/manager.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/retry/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/base/retry/retry.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/compat.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/dispatch/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/dispatch/candidate.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/dispatch/dispatcher.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/dispatch/proxy_selector.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/dispatch/race.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/dispatch/selector.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/dispatch/usage.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/parsers/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/parsers/stream.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/parsers/xml_params.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/parsers/xml_parser.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/prompt/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/prompt/history.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/prompt/history_format.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/prompt/inject.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/prompt/prompt_helpers.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/prompt/templates.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_invoke.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_patterns.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_think/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_think/core.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_think/hist.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_think/parse.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_tool_blocks.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_tools.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_values.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/registry.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/shared/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/shared/coercion.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/shared/history_markup.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/shared/loop_detect.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/shared/normalization.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/shared/schema_render.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/shared/xml_helpers.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/keys.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/lifecycle/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/lifecycle/manager.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/lifecycle/updater.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/lifecycle/updater_pull.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/process/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/process/port.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/protocol/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/protocol/base.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/conpty.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/local/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/local/core.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/local/proc.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/local/unix.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/local/win.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/sanitize.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/session/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/session/base.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/session/client.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/ssh.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/terminal/tmux.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/charmap.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/spinner.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/ui.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/mixins/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/mixins/uibase.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/mixins/uicmds.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/mixins/uiinteract.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/mixins/uioutput.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/mixins/uistream.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/ui_console.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/ui_io.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/ui_log.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/ui_platform.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/ui_text.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/ui_types.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uilayout/ui_countdown.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uilayout/ui_layout.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uilayout/ui_misc.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uilayout/ui_panel.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uilayout/ui_table.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uilayout/ui_tree.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uiwidgets/ui_box.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uiwidgets/ui_editor.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uiwidgets/ui_progress.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uiwidgets/ui_select.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uiwidgets/ui_stream.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/events/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/events/bus.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/events/event.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/spinner/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/spinner/spinner.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/spinner/spinner_color.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/tracing/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/tracing/context.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/tracing/span.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/tracing/tracer.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/translate.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/watcher/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/watcher/file_watcher.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/application.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/broker.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/app.js +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/filezone.js +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/motionkit.js +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/sendbutton.js +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/sortablelist.css +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/sortablelist.js +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/textinput.js +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/voiceinput.js +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/fonts/inter-500.woff2 +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/fonts/inter-600.woff2 +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/fonts/inter400.woff2 +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/inputbox.css +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/inputbox.js +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/style.css +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/voicegif.js +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/middleware.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/stats.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/utils.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/files/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/files/file_util.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/network/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/network/http_utils.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/plugin/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/plugin/base.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/plugin/discovery.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/plugin/registry.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/plugin/registry_ops.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/proxy/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/proxy/manager.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/runtime/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/runtime/collector.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/scheduler/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/scheduler/scheduler.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/sdk/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/plat/sdk/facade.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools/version.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools.egg-info/SOURCES.txt +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools.egg-info/dependency_links.txt +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools.egg-info/requires.txt +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/echotools.egg-info/top_level.txt +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/_check_parity.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/bench_import.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/conftest.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/fixtures/__init__.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/fixtures/simulated_fake_history_markup_responses.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/fixtures/simulated_fault_thinking_responses.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/fixtures/simulated_llm_tool_responses.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_adversarial_stream_splits.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_cache_retry.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_completion.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_config.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_config_extended.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_console.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_coverage_core.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_dispatch.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_dispatch_extended.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_dispatch_race.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_agent_output_formats.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_bare_invoke_format.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_batch_stream_comprehensive.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_parser_comprehensive.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_protocol.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_stream_json.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_stream_json_exhaustive.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_thinking_history.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_thinking_parse.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_tool_parse_leak.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_tool_pipeline.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_entml_tools.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_errors.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_errors_common.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_events.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_events_event.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_facade.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_fake_history_markup_batch.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_fake_history_markup_invoke_preserve.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_fake_history_markup_reply_protect.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_fake_history_markup_stream.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_fault_thinking_close_batch.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_fault_thinking_close_stream.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_fncall.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_fncall_stream_thinking.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_history_markup_filter.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_ids.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_imports.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_io.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_keys.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_lifecycle.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_logger.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_merge.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_model_branch_matrix.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_plugin.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_printstream.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_protocols.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_proxy.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_proxy_selector.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_runtime.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_scheduler.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_simulated_llm_tool_parse.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_stream_realtime_parse.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_tracing.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_usage.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_web.py +0 -0
- {echotools-2.3.81 → echotools-2.3.82}/src/tests/test_web_broker.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: echotools
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.82
|
|
4
4
|
Summary: 通用基础设施 SDK:配置、日志、事件、调度、插件、协议、调用链
|
|
5
5
|
Home-page: https://github.com/nichengfuben/echotools
|
|
6
6
|
Author: nichengfuben
|
|
@@ -82,6 +82,20 @@ pip install echotools[all]
|
|
|
82
82
|
| `all` | 全部可选依赖 |
|
|
83
83
|
| `dev` | pytest, ruff, mypy |
|
|
84
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
|
+
|
|
85
99
|
## 快速开始
|
|
86
100
|
|
|
87
101
|
```python
|
|
@@ -26,6 +26,20 @@ pip install echotools[all]
|
|
|
26
26
|
| `all` | 全部可选依赖 |
|
|
27
27
|
| `dev` | pytest, ruff, mypy |
|
|
28
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
|
+
|
|
29
43
|
## 快速开始
|
|
30
44
|
|
|
31
45
|
```python
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_stream_json.py
RENAMED
|
@@ -20,6 +20,7 @@ from .entml_patterns import (
|
|
|
20
20
|
parameter_close_at,
|
|
21
21
|
)
|
|
22
22
|
from .entml_values import coerce_entml_parameter_value
|
|
23
|
+
from echotools.exec.fncall.shared.coercion import _resolve_effective_type
|
|
23
24
|
|
|
24
25
|
_PARAM_OPEN_RE = re.compile(rf"{PARAM_OPEN_PATTERN}([^>]*)>", re.IGNORECASE)
|
|
25
26
|
_PARAM_CLOSE = PARAM_CLOSE_ENTML
|
|
@@ -90,8 +91,10 @@ def _effective_param_type(
|
|
|
90
91
|
mapped = _TYPE_HINT_TO_JSON_TYPE.get(type_hint.strip().lower())
|
|
91
92
|
if mapped:
|
|
92
93
|
return mapped
|
|
93
|
-
if pschema
|
|
94
|
-
|
|
94
|
+
if pschema:
|
|
95
|
+
resolved = _resolve_effective_type(pschema)
|
|
96
|
+
if resolved:
|
|
97
|
+
return resolved
|
|
95
98
|
stripped = (value or "").lstrip()
|
|
96
99
|
if stripped.startswith("["):
|
|
97
100
|
return "array"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: echotools
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.82
|
|
4
4
|
Summary: 通用基础设施 SDK:配置、日志、事件、调度、插件、协议、调用链
|
|
5
5
|
Home-page: https://github.com/nichengfuben/echotools
|
|
6
6
|
Author: nichengfuben
|
|
@@ -82,6 +82,20 @@ pip install echotools[all]
|
|
|
82
82
|
| `all` | 全部可选依赖 |
|
|
83
83
|
| `dev` | pytest, ruff, mypy |
|
|
84
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
|
+
|
|
85
99
|
## 快速开始
|
|
86
100
|
|
|
87
101
|
```python
|
|
@@ -85,6 +85,60 @@ def test_bare_parameter_close_at_buffer_end_snapshot() -> None:
|
|
|
85
85
|
assert json.loads(snap + "}") == {"pattern": "foo|bar"}
|
|
86
86
|
|
|
87
87
|
|
|
88
|
+
def test_read_anyof_integer_stream_json_buf_matches_batch() -> None:
|
|
89
|
+
"""Rogator Read:line_offset 为 anyOf integer 时,流式 json_buf 不得误加引号(143143)。"""
|
|
90
|
+
tools = [
|
|
91
|
+
{
|
|
92
|
+
"type": "function",
|
|
93
|
+
"function": {
|
|
94
|
+
"name": "Read",
|
|
95
|
+
"parameters": {
|
|
96
|
+
"type": "object",
|
|
97
|
+
"properties": {
|
|
98
|
+
"path": {"type": "string"},
|
|
99
|
+
"line_offset": {
|
|
100
|
+
"anyOf": [
|
|
101
|
+
{"type": "integer", "minimum": 1},
|
|
102
|
+
{"type": "integer", "maximum": -1},
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
"n_lines": {"type": "integer", "exclusiveMinimum": 0},
|
|
106
|
+
},
|
|
107
|
+
"required": ["path"],
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
text = (
|
|
113
|
+
'<entml:invoke name="Read">\n'
|
|
114
|
+
'<entml:parameter name="path">X:/Project/Local/DeepSeek/core/guard/pow.py</entml:parameter>\n'
|
|
115
|
+
'<entml:parameter name="line_offset">143</entml:parameter>\n'
|
|
116
|
+
'<entml:parameter name="n_lines">15</entml:parameter>\n'
|
|
117
|
+
"</entml:invoke>"
|
|
118
|
+
)
|
|
119
|
+
proto = get_protocol("entml")
|
|
120
|
+
batch_args = json.loads(proto.parse(text, tools)[1][0]["function"]["arguments"])
|
|
121
|
+
parser = FncallStreamParser(protocol=proto, tools=tools)
|
|
122
|
+
json_buf = ""
|
|
123
|
+
for i in range(0, len(text), 17):
|
|
124
|
+
parser.feed(text[i : i + 17])
|
|
125
|
+
while True:
|
|
126
|
+
delta = parser.consume_stream_delta()
|
|
127
|
+
if not delta:
|
|
128
|
+
break
|
|
129
|
+
json_buf += delta[1]
|
|
130
|
+
comp = parser.complete_stream_delta_if_needed()
|
|
131
|
+
if comp:
|
|
132
|
+
json_buf += comp[1]
|
|
133
|
+
parser.finalize()
|
|
134
|
+
assert json.loads(json_buf) == batch_args
|
|
135
|
+
assert batch_args == {
|
|
136
|
+
"path": "X:/Project/Local/DeepSeek/core/guard/pow.py",
|
|
137
|
+
"line_offset": 143,
|
|
138
|
+
"n_lines": 15,
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
|
|
88
142
|
def test_parameters_block_no_stream_until_closed() -> None:
|
|
89
143
|
body = (
|
|
90
144
|
"<entml:parameters>\n"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_think/__init__.py
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_think/core.py
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_think/hist.py
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_think/parse.py
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/exec/fncall/protocols/entml_tool_blocks.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/console/uicore/mixins/uiinteract.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/filezone.js
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/motionkit.js
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/sendbutton.js
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/sortablelist.css
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/sortablelist.js
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/textinput.js
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/components/voiceinput.js
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/fonts/inter-500.woff2
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/fonts/inter-600.woff2
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/echotools/media/web/input_box/fonts/inter400.woff2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/tests/fixtures/simulated_fake_history_markup_responses.py
RENAMED
|
File without changes
|
{echotools-2.3.81 → echotools-2.3.82}/src/tests/fixtures/simulated_fault_thinking_responses.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|