echotools 2.4.2__tar.gz → 2.4.4__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.4.2 → echotools-2.4.4}/PKG-INFO +2 -2
- {echotools-2.4.2 → echotools-2.4.4}/README.md +1 -1
- {echotools-2.4.2 → echotools-2.4.4}/pyproject.toml +1 -1
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_schema/validate.py +2 -24
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_tool/fakemarkup.py +4 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/shared/coercion.py +24 -4
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools.egg-info/PKG-INFO +2 -2
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_fake_structure_markup.py +6 -0
- {echotools-2.4.2 → echotools-2.4.4}/setup.cfg +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/cache/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/cache/list_cache.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/cache/memory_cache.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/config/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/config/base.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/config/center.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/config/center_notify.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/config/center_template.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/config/loader.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/config/merge.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/errors/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/errors/base.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/errors/classify.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/errors/common.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/errors/http.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/ids/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/ids/generator.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/io/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/io/io_utils.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/io/printstream.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/logger/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/logger/manager.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/retry/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/base/retry/retry.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/dispatch/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/dispatch/candidate.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/dispatch/dispatcher.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/dispatch/proxy_selector.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/dispatch/race.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/dispatch/selector.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/dispatch/usage.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/parsers/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/parsers/stream.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/parsers/stream_delta.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/parsers/stream_feed.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/parsers/stream_final.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/prompt/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/prompt/behavior_blocks.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/prompt/history.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/prompt/history_format.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/prompt/inject.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/prompt/prompt_helpers.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_patterns/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_patterns/invoke.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_patterns/params.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_patterns/regex.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_patterns/strip.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_schema/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_schema/mangled.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_stream/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_stream/body.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_stream/snap.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_think/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_think/core.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_think/filter.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_think/hist.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_think/hold.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_think/parse.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_tool/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_tool/comment.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_tool/invoke.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_tool/tools.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_tool/values.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/registry.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/shared/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/shared/entml_format.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/shared/history_markup.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/shared/loop_detect.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/shared/normalization.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/shared/schema_render.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/keys.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/lifecycle/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/lifecycle/manager.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/lifecycle/updater.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/lifecycle/updater_pull.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/process/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/process/port.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/protocol/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/protocol/base.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/conpty.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/local/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/local/core.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/local/proc.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/local/unix.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/local/win.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/sanitize.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/session/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/session/base.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/session/client.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/ssh.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/terminal/tmux.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/charmap.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/spinner.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/ui.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/mixins/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/mixins/uibase.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/mixins/uicmds.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/mixins/uiinteract.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/mixins/uioutput.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/mixins/uistream.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/ui_console.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/ui_io.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/ui_log.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/ui_platform.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/ui_text.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uicore/ui_types.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uilayout/ui_bridge.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uilayout/ui_countdown.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uilayout/ui_layout.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uilayout/ui_misc.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uilayout/ui_panel.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uilayout/ui_table.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uilayout/ui_tree.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uiwidgets/ui_box.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uiwidgets/ui_editor.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uiwidgets/ui_progress.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uiwidgets/ui_richcli.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uiwidgets/ui_select.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uiwidgets/ui_stream.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/console/uiwidgets/ui_themes.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/events/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/events/bus.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/events/event.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/spinner/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/spinner/spinner.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/spinner/spinner_color.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/tracing/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/tracing/context.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/tracing/span.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/tracing/tracer.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/translate.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/watcher/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/watcher/file_watcher.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/application.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/broker.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/app.js +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/filezone.js +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/motionkit.js +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/sendbutton.js +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/sortablelist.css +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/sortablelist.js +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/textinput.js +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/voiceinput.js +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/fonts/inter-500.woff2 +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/fonts/inter-600.woff2 +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/fonts/inter400.woff2 +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/inputbox.css +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/inputbox.js +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/style.css +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/voicegif.js +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/middleware.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/stats.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/utils.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/files/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/files/file_util.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/network/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/network/http_utils.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/plugin/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/plugin/base.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/plugin/discovery.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/plugin/registry.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/plugin/registry_ops.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/proxy/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/proxy/manager.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/runtime/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/runtime/collector.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/scheduler/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/scheduler/scheduler.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/sdk/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/plat/sdk/facade.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools/version.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools.egg-info/SOURCES.txt +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools.egg-info/dependency_links.txt +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools.egg-info/requires.txt +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/echotools.egg-info/top_level.txt +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/_check_parity.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/bench_import.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/conftest.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/fixtures/__init__.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/fixtures/entml_golden.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/fixtures/entml_golden_update.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/fixtures/simulated_fake_history_markup_responses.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/fixtures/simulated_fault_thinking_responses.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/fixtures/simulated_llm_tool_responses.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_adversarial_stream_splits.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_cache_retry.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_completion.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_config.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_config_extended.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_console.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_coverage_core.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_dispatch.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_dispatch_extended.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_dispatch_race.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_agent_output_formats.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_bare_invoke_format.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_batch_stream_comprehensive.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_golden.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_invoke_known_tool_gate.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_parser_comprehensive.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_protocol.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_stream_json.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_stream_json_exhaustive.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_thinking_history.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_thinking_parse.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_tool_parse_leak.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_tool_pipeline.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_entml_tools.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_errors.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_errors_common.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_events.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_events_event.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_facade.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_fake_history_markup_batch.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_fake_history_markup_invoke_preserve.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_fake_history_markup_reply_protect.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_fake_history_markup_stream.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_fault_thinking_close_batch.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_fault_thinking_close_stream.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_fncall.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_fncall_stream_thinking.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_history_markup_filter.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_ids.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_imports.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_io.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_keys.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_lifecycle.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_logger.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_merge.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_model_branch_matrix.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_multiline_parameter_comprehensive.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_plugin.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_printstream.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_protocols.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_proxy.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_proxy_selector.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_runtime.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_scheduler.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_schema_validate.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_simulated_llm_tool_parse.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_stream_partial_json_parity.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_stream_realtime_parse.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_tracing.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_ui_bridge.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_usage.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/src/tests/test_web.py +0 -0
- {echotools-2.4.2 → echotools-2.4.4}/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.4.
|
|
3
|
+
Version: 2.4.4
|
|
4
4
|
Summary: 通用基础设施 SDK:配置、日志、事件、调度、插件、协议、调用链
|
|
5
5
|
Home-page: https://github.com/nichengfuben/echotools
|
|
6
6
|
Author: nichengfuben
|
|
@@ -58,7 +58,7 @@ Requires-Dist: ruff>=0.4.0; extra == "dev"
|
|
|
58
58
|
|
|
59
59
|
通用基础设施 SDK:配置、日志、事件、调度、插件、调用链,以及 **entml** LLM 工具调用协议与终端 Console UI。
|
|
60
60
|
|
|
61
|
-
完全项目无关,兼容 Python 3.8–3.14。当前版本:**2.4.
|
|
61
|
+
完全项目无关,兼容 Python 3.8–3.14。当前版本:**2.4.4**(详见 [CHANGELOG](docs/CHANGELOG.md))。
|
|
62
62
|
|
|
63
63
|
## 安装
|
|
64
64
|
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_schema/validate.py
RENAMED
|
@@ -5,6 +5,8 @@ from __future__ import annotations
|
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
from typing import Any, Dict, List, Optional, Sequence
|
|
7
7
|
|
|
8
|
+
from echotools.exec.fncall.shared.coercion import is_null_literal, schema_allows_null
|
|
9
|
+
|
|
8
10
|
_SCALAR_CHECK = {
|
|
9
11
|
"string": lambda v: isinstance(v, str),
|
|
10
12
|
"integer": lambda v: isinstance(v, int) and not isinstance(v, bool),
|
|
@@ -47,30 +49,6 @@ class ToolArgValidationError(Exception):
|
|
|
47
49
|
return f"{prefix}\n{body}".strip() if prefix else body
|
|
48
50
|
|
|
49
51
|
|
|
50
|
-
def schema_allows_null(schema: Dict[str, Any]) -> bool:
|
|
51
|
-
if not schema:
|
|
52
|
-
return False
|
|
53
|
-
raw_type = schema.get("type")
|
|
54
|
-
if raw_type == "null":
|
|
55
|
-
return True
|
|
56
|
-
if isinstance(raw_type, list) and "null" in raw_type:
|
|
57
|
-
return True
|
|
58
|
-
for key in ("anyOf", "oneOf"):
|
|
59
|
-
combiner = schema.get(key)
|
|
60
|
-
if not isinstance(combiner, list):
|
|
61
|
-
continue
|
|
62
|
-
for sub in combiner:
|
|
63
|
-
if isinstance(sub, dict) and sub.get("type") == "null":
|
|
64
|
-
return True
|
|
65
|
-
return False
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
def is_null_literal(raw: str) -> bool:
|
|
69
|
-
if raw is None:
|
|
70
|
-
return True
|
|
71
|
-
return raw.strip().lower() in ("", "null", "none")
|
|
72
|
-
|
|
73
|
-
|
|
74
52
|
def _enum_values(schema: Dict[str, Any]) -> Optional[List[Any]]:
|
|
75
53
|
enum_vals = schema.get("enum")
|
|
76
54
|
if isinstance(enum_vals, list) and enum_vals:
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_tool/fakemarkup.py
RENAMED
|
@@ -29,6 +29,7 @@ _TAG_ONLY_OPEN_RES = (
|
|
|
29
29
|
re.compile(r"<entml:call\b[^>]*>", re.IGNORECASE),
|
|
30
30
|
re.compile(r"<function_calling_behavior\b[^>]*>", re.IGNORECASE),
|
|
31
31
|
re.compile(r"<thinking_behavior\b[^>]*>", re.IGNORECASE),
|
|
32
|
+
re.compile(r"<entml:hard_constraint_restatement\b[^>]*>", re.IGNORECASE),
|
|
32
33
|
re.compile(r"<entml:result\b[^>]*>", re.IGNORECASE),
|
|
33
34
|
re.compile(r"<entml:todo\b[^>]*>", re.IGNORECASE),
|
|
34
35
|
)
|
|
@@ -39,6 +40,7 @@ _TAG_ONLY_CLOSE_RES = (
|
|
|
39
40
|
re.compile(r"</entml:call\s*>", re.IGNORECASE),
|
|
40
41
|
re.compile(r"</function_calling_behavior\s*>", re.IGNORECASE),
|
|
41
42
|
re.compile(r"</thinking_behavior\s*>", re.IGNORECASE),
|
|
43
|
+
re.compile(r"</entml:hard_constraint_restatement\s*>", re.IGNORECASE),
|
|
42
44
|
re.compile(r"</entml:result\s*>", re.IGNORECASE),
|
|
43
45
|
re.compile(r"</entml:todo\s*>", re.IGNORECASE),
|
|
44
46
|
)
|
|
@@ -58,6 +60,8 @@ _FAKE_ENTML_TAG_PREFIXES: Tuple[str, ...] = (
|
|
|
58
60
|
"</function_calling_behavior",
|
|
59
61
|
"<thinking_behavior",
|
|
60
62
|
"</thinking_behavior",
|
|
63
|
+
"<entml:hard_constraint_restatement",
|
|
64
|
+
"</entml:hard_constraint_restatement",
|
|
61
65
|
"<entml:todo",
|
|
62
66
|
"</entml:todo",
|
|
63
67
|
"</entml:invoke",
|
|
@@ -10,10 +10,6 @@ import json
|
|
|
10
10
|
from typing import Any, Dict, List, Optional, Sequence
|
|
11
11
|
|
|
12
12
|
from echotools.base.logger.manager import get_logger
|
|
13
|
-
from echotools.exec.fncall.protocols.entml_schema.validate import (
|
|
14
|
-
is_null_literal,
|
|
15
|
-
schema_allows_null,
|
|
16
|
-
)
|
|
17
13
|
|
|
18
14
|
logger = get_logger(__name__)
|
|
19
15
|
|
|
@@ -21,6 +17,30 @@ _SCALAR_TYPES = frozenset({"string", "integer", "number", "boolean", "null"})
|
|
|
21
17
|
_CONTAINER_TYPES = frozenset({"array", "object"})
|
|
22
18
|
|
|
23
19
|
|
|
20
|
+
def schema_allows_null(schema: Dict[str, Any]) -> bool:
|
|
21
|
+
if not schema:
|
|
22
|
+
return False
|
|
23
|
+
raw_type = schema.get("type")
|
|
24
|
+
if raw_type == "null":
|
|
25
|
+
return True
|
|
26
|
+
if isinstance(raw_type, list) and "null" in raw_type:
|
|
27
|
+
return True
|
|
28
|
+
for key in ("anyOf", "oneOf"):
|
|
29
|
+
combiner = schema.get(key)
|
|
30
|
+
if not isinstance(combiner, list):
|
|
31
|
+
continue
|
|
32
|
+
for sub in combiner:
|
|
33
|
+
if isinstance(sub, dict) and sub.get("type") == "null":
|
|
34
|
+
return True
|
|
35
|
+
return False
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def is_null_literal(raw: str) -> bool:
|
|
39
|
+
if raw is None:
|
|
40
|
+
return True
|
|
41
|
+
return raw.strip().lower() in ("", "null", "none")
|
|
42
|
+
|
|
43
|
+
|
|
24
44
|
def _build_param_schema_index(
|
|
25
45
|
tools: Optional[List[Dict[str, Any]]],
|
|
26
46
|
) -> Dict[str, Dict[str, Dict[str, Any]]]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: echotools
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.4
|
|
4
4
|
Summary: 通用基础设施 SDK:配置、日志、事件、调度、插件、协议、调用链
|
|
5
5
|
Home-page: https://github.com/nichengfuben/echotools
|
|
6
6
|
Author: nichengfuben
|
|
@@ -58,7 +58,7 @@ Requires-Dist: ruff>=0.4.0; extra == "dev"
|
|
|
58
58
|
|
|
59
59
|
通用基础设施 SDK:配置、日志、事件、调度、插件、调用链,以及 **entml** LLM 工具调用协议与终端 Console UI。
|
|
60
60
|
|
|
61
|
-
完全项目无关,兼容 Python 3.8–3.14。当前版本:**2.4.
|
|
61
|
+
完全项目无关,兼容 Python 3.8–3.14。当前版本:**2.4.4**(详见 [CHANGELOG](docs/CHANGELOG.md))。
|
|
62
62
|
|
|
63
63
|
## 安装
|
|
64
64
|
|
|
@@ -77,6 +77,12 @@ READ_TOOL = {
|
|
|
77
77
|
"thinking_behavior",
|
|
78
78
|
"后",
|
|
79
79
|
),
|
|
80
|
+
(
|
|
81
|
+
"前\n<entml:hard_constraint_restatement>\n硬约束复述\n</entml:hard_constraint_restatement>\n后",
|
|
82
|
+
"硬约束复述",
|
|
83
|
+
"hard_constraint_restatement",
|
|
84
|
+
"后",
|
|
85
|
+
),
|
|
80
86
|
(
|
|
81
87
|
"<entml:result>\nbody\n</entml:result>\nok",
|
|
82
88
|
"body",
|
|
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.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_patterns/__init__.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_patterns/invoke.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_patterns/params.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_patterns/regex.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_patterns/strip.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_schema/__init__.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_schema/mangled.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_stream/__init__.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_stream/body.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_stream/snap.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_think/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_think/filter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_think/parse.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_tool/__init__.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_tool/comment.py
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_tool/invoke.py
RENAMED
|
File without changes
|
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/exec/fncall/protocols/entml_tool/values.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
|
|
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.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/filezone.js
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/motionkit.js
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/sendbutton.js
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/sortablelist.css
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/sortablelist.js
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/textinput.js
RENAMED
|
File without changes
|
{echotools-2.4.2 → echotools-2.4.4}/src/echotools/media/web/input_box/components/voiceinput.js
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
|