README.md
pyproject.toml
setup.cfg
src/echotools/__init__.py
src/echotools/version.py
src/echotools.egg-info/PKG-INFO
src/echotools.egg-info/SOURCES.txt
src/echotools.egg-info/dependency_links.txt
src/echotools.egg-info/requires.txt
src/echotools.egg-info/top_level.txt
src/echotools/base/cache/__init__.py
src/echotools/base/cache/list_cache.py
src/echotools/base/cache/memory_cache.py
src/echotools/base/config/__init__.py
src/echotools/base/config/base.py
src/echotools/base/config/center.py
src/echotools/base/config/center_notify.py
src/echotools/base/config/center_template.py
src/echotools/base/config/loader.py
src/echotools/base/config/merge.py
src/echotools/base/errors/__init__.py
src/echotools/base/errors/base.py
src/echotools/base/errors/classify.py
src/echotools/base/errors/common.py
src/echotools/base/errors/http.py
src/echotools/base/ids/__init__.py
src/echotools/base/ids/generator.py
src/echotools/base/io/__init__.py
src/echotools/base/io/io_utils.py
src/echotools/base/io/printstream.py
src/echotools/base/logger/__init__.py
src/echotools/base/logger/manager.py
src/echotools/base/retry/__init__.py
src/echotools/base/retry/retry.py
src/echotools/exec/keys.py
src/echotools/exec/dispatch/__init__.py
src/echotools/exec/dispatch/candidate.py
src/echotools/exec/dispatch/dispatcher.py
src/echotools/exec/dispatch/proxy_selector.py
src/echotools/exec/dispatch/race.py
src/echotools/exec/dispatch/selector.py
src/echotools/exec/dispatch/usage.py
src/echotools/exec/fncall/__init__.py
src/echotools/exec/fncall/registry.py
src/echotools/exec/fncall/tool_id.py
src/echotools/exec/fncall/parsers/__init__.py
src/echotools/exec/fncall/parsers/stream.py
src/echotools/exec/fncall/parsers/stream_delta.py
src/echotools/exec/fncall/parsers/stream_feed.py
src/echotools/exec/fncall/parsers/stream_final.py
src/echotools/exec/fncall/prompt/__init__.py
src/echotools/exec/fncall/prompt/behavior_blocks.py
src/echotools/exec/fncall/prompt/history.py
src/echotools/exec/fncall/prompt/history_format.py
src/echotools/exec/fncall/prompt/inject.py
src/echotools/exec/fncall/prompt/prompt_helpers.py
src/echotools/exec/fncall/protocols/__init__.py
src/echotools/exec/fncall/protocols/entml.py
src/echotools/exec/fncall/protocols/entml_patterns/__init__.py
src/echotools/exec/fncall/protocols/entml_patterns/invoke.py
src/echotools/exec/fncall/protocols/entml_patterns/params.py
src/echotools/exec/fncall/protocols/entml_patterns/regex.py
src/echotools/exec/fncall/protocols/entml_patterns/strip.py
src/echotools/exec/fncall/protocols/entml_schema/__init__.py
src/echotools/exec/fncall/protocols/entml_schema/mangled.py
src/echotools/exec/fncall/protocols/entml_schema/validate.py
src/echotools/exec/fncall/protocols/entml_stream/__init__.py
src/echotools/exec/fncall/protocols/entml_stream/body.py
src/echotools/exec/fncall/protocols/entml_stream/snap.py
src/echotools/exec/fncall/protocols/entml_think/__init__.py
src/echotools/exec/fncall/protocols/entml_think/core.py
src/echotools/exec/fncall/protocols/entml_think/filter.py
src/echotools/exec/fncall/protocols/entml_think/hist.py
src/echotools/exec/fncall/protocols/entml_think/hold.py
src/echotools/exec/fncall/protocols/entml_think/parse.py
src/echotools/exec/fncall/protocols/entml_tool/__init__.py
src/echotools/exec/fncall/protocols/entml_tool/comment.py
src/echotools/exec/fncall/protocols/entml_tool/fakemarkup.py
src/echotools/exec/fncall/protocols/entml_tool/invoke.py
src/echotools/exec/fncall/protocols/entml_tool/tools.py
src/echotools/exec/fncall/protocols/entml_tool/values.py
src/echotools/exec/fncall/shared/__init__.py
src/echotools/exec/fncall/shared/coercion.py
src/echotools/exec/fncall/shared/entml_format.py
src/echotools/exec/fncall/shared/history_markup.py
src/echotools/exec/fncall/shared/loop_detect.py
src/echotools/exec/fncall/shared/normalization.py
src/echotools/exec/fncall/shared/schema_render.py
src/echotools/exec/lifecycle/__init__.py
src/echotools/exec/lifecycle/manager.py
src/echotools/exec/lifecycle/updater.py
src/echotools/exec/lifecycle/updater_pull.py
src/echotools/exec/process/__init__.py
src/echotools/exec/process/port.py
src/echotools/exec/protocol/__init__.py
src/echotools/exec/protocol/base.py
src/echotools/exec/terminal/__init__.py
src/echotools/exec/terminal/conpty.py
src/echotools/exec/terminal/sanitize.py
src/echotools/exec/terminal/ssh.py
src/echotools/exec/terminal/tmux.py
src/echotools/exec/terminal/local/__init__.py
src/echotools/exec/terminal/local/core.py
src/echotools/exec/terminal/local/proc.py
src/echotools/exec/terminal/local/unix.py
src/echotools/exec/terminal/local/win.py
src/echotools/exec/terminal/session/__init__.py
src/echotools/exec/terminal/session/base.py
src/echotools/exec/terminal/session/client.py
src/echotools/media/translate.py
src/echotools/media/console/__init__.py
src/echotools/media/console/charmap.py
src/echotools/media/console/spinner.py
src/echotools/media/console/ui.py
src/echotools/media/console/uicore/ui_console.py
src/echotools/media/console/uicore/ui_io.py
src/echotools/media/console/uicore/ui_log.py
src/echotools/media/console/uicore/ui_platform.py
src/echotools/media/console/uicore/ui_text.py
src/echotools/media/console/uicore/ui_types.py
src/echotools/media/console/uicore/mixins/__init__.py
src/echotools/media/console/uicore/mixins/uibase.py
src/echotools/media/console/uicore/mixins/uicmds.py
src/echotools/media/console/uicore/mixins/uiinteract.py
src/echotools/media/console/uicore/mixins/uioutput.py
src/echotools/media/console/uicore/mixins/uistream.py
src/echotools/media/console/uilayout/ui_bridge.py
src/echotools/media/console/uilayout/ui_countdown.py
src/echotools/media/console/uilayout/ui_layout.py
src/echotools/media/console/uilayout/ui_misc.py
src/echotools/media/console/uilayout/ui_panel.py
src/echotools/media/console/uilayout/ui_table.py
src/echotools/media/console/uilayout/ui_tree.py
src/echotools/media/console/uiwidgets/ui_box.py
src/echotools/media/console/uiwidgets/ui_editor.py
src/echotools/media/console/uiwidgets/ui_progress.py
src/echotools/media/console/uiwidgets/ui_richcli.py
src/echotools/media/console/uiwidgets/ui_select.py
src/echotools/media/console/uiwidgets/ui_stream.py
src/echotools/media/console/uiwidgets/ui_themes.py
src/echotools/media/events/__init__.py
src/echotools/media/events/bus.py
src/echotools/media/events/event.py
src/echotools/media/spinner/__init__.py
src/echotools/media/spinner/spinner.py
src/echotools/media/spinner/spinner_color.py
src/echotools/media/tracing/__init__.py
src/echotools/media/tracing/context.py
src/echotools/media/tracing/span.py
src/echotools/media/tracing/tracer.py
src/echotools/media/watcher/__init__.py
src/echotools/media/watcher/file_watcher.py
src/echotools/media/web/__init__.py
src/echotools/media/web/application.py
src/echotools/media/web/broker.py
src/echotools/media/web/middleware.py
src/echotools/media/web/stats.py
src/echotools/media/web/utils.py
src/echotools/media/web/input_box/app.js
src/echotools/media/web/input_box/inputbox.css
src/echotools/media/web/input_box/inputbox.js
src/echotools/media/web/input_box/style.css
src/echotools/media/web/input_box/voicegif.js
src/echotools/media/web/input_box/components/filezone.js
src/echotools/media/web/input_box/components/motionkit.js
src/echotools/media/web/input_box/components/sendbutton.js
src/echotools/media/web/input_box/components/sortablelist.css
src/echotools/media/web/input_box/components/sortablelist.js
src/echotools/media/web/input_box/components/textinput.js
src/echotools/media/web/input_box/components/voiceinput.js
src/echotools/media/web/input_box/fonts/inter-500.woff2
src/echotools/media/web/input_box/fonts/inter-600.woff2
src/echotools/media/web/input_box/fonts/inter400.woff2
src/echotools/plat/capture/__init__.py
src/echotools/plat/capture/audio_monitor/api.py
src/echotools/plat/capture/audio_monitor/config.py
src/echotools/plat/capture/audio_monitor/linux.py
src/echotools/plat/capture/audio_monitor/mac.py
src/echotools/plat/capture/audio_monitor/types.py
src/echotools/plat/capture/audio_monitor/win.py
src/echotools/plat/capture/audio_record/api.py
src/echotools/plat/capture/audio_record/config.py
src/echotools/plat/capture/audio_record/linux.py
src/echotools/plat/capture/audio_record/mac.py
src/echotools/plat/capture/audio_record/win.py
src/echotools/plat/capture/audio_record/win_wasapi.py
src/echotools/plat/capture/audio_record/win_winmm.py
src/echotools/plat/capture/screenshot/api.py
src/echotools/plat/capture/screenshot/config.py
src/echotools/plat/capture/screenshot/linux.py
src/echotools/plat/capture/screenshot/mac.py
src/echotools/plat/capture/screenshot/win.py
src/echotools/plat/capture/screenshot/win_dxgi.py
src/echotools/plat/capture/screenshot/win_gdi.py
src/echotools/plat/capture/shared/__init__.py
src/echotools/plat/capture/shared/bmp.py
src/echotools/plat/capture/shared/pcm.py
src/echotools/plat/capture/shared/platform.py
src/echotools/plat/capture/shared/wav.py
src/echotools/plat/capture/shared/win_com.py
src/echotools/plat/files/__init__.py
src/echotools/plat/files/file_util.py
src/echotools/plat/network/__init__.py
src/echotools/plat/network/http_utils.py
src/echotools/plat/plugin/__init__.py
src/echotools/plat/plugin/base.py
src/echotools/plat/plugin/discovery.py
src/echotools/plat/plugin/registry.py
src/echotools/plat/plugin/registry_ops.py
src/echotools/plat/proxy/__init__.py
src/echotools/plat/proxy/manager.py
src/echotools/plat/sdk/__init__.py
src/echotools/plat/sdk/facade.py
src/echotools/plat/sdk/runtime.py
src/echotools/plat/sdk/scheduler.py
src/tests/_check_parity.py
src/tests/bench_import.py
src/tests/conftest.py
src/tests/test_adversarial_stream_splits.py
src/tests/test_cache_retry.py
src/tests/test_completion.py
src/tests/test_config.py
src/tests/test_config_extended.py
src/tests/test_console.py
src/tests/test_coverage_core.py
src/tests/test_dispatch.py
src/tests/test_dispatch_extended.py
src/tests/test_dispatch_race.py
src/tests/test_entml_agent_output_formats.py
src/tests/test_entml_bare_invoke_format.py
src/tests/test_entml_batch_stream_comprehensive.py
src/tests/test_entml_fake_structure_markup.py
src/tests/test_entml_golden.py
src/tests/test_entml_invoke_known_tool_gate.py
src/tests/test_entml_parser_comprehensive.py
src/tests/test_entml_protocol.py
src/tests/test_entml_stream_json.py
src/tests/test_entml_stream_json_exhaustive.py
src/tests/test_entml_thinking_history.py
src/tests/test_entml_thinking_parse.py
src/tests/test_entml_tool_parse_leak.py
src/tests/test_entml_tool_pipeline.py
src/tests/test_entml_tools.py
src/tests/test_errors.py
src/tests/test_errors_common.py
src/tests/test_events.py
src/tests/test_events_event.py
src/tests/test_facade.py
src/tests/test_fake_history_markup_batch.py
src/tests/test_fake_history_markup_invoke_preserve.py
src/tests/test_fake_history_markup_reply_protect.py
src/tests/test_fake_history_markup_stream.py
src/tests/test_fault_thinking_close_batch.py
src/tests/test_fault_thinking_close_stream.py
src/tests/test_fncall.py
src/tests/test_fncall_stream_thinking.py
src/tests/test_history_markup_filter.py
src/tests/test_ids.py
src/tests/test_imports.py
src/tests/test_io.py
src/tests/test_keys.py
src/tests/test_lifecycle.py
src/tests/test_logger.py
src/tests/test_merge.py
src/tests/test_model_branch_matrix.py
src/tests/test_multiline_parameter_comprehensive.py
src/tests/test_plat_capture.py
src/tests/test_plugin.py
src/tests/test_printstream.py
src/tests/test_protocols.py
src/tests/test_proxy.py
src/tests/test_proxy_selector.py
src/tests/test_runtime.py
src/tests/test_scheduler.py
src/tests/test_schema_validate.py
src/tests/test_simulated_llm_tool_parse.py
src/tests/test_stream_partial_json_parity.py
src/tests/test_stream_realtime_parse.py
src/tests/test_tool_id.py
src/tests/test_tracing.py
src/tests/test_ui_bridge.py
src/tests/test_usage.py
src/tests/test_web.py
src/tests/test_web_broker.py
src/tests/fixtures/__init__.py
src/tests/fixtures/entml_golden.py
src/tests/fixtures/entml_golden_update.py
src/tests/fixtures/simulated_fake_history_markup_responses.py
src/tests/fixtures/simulated_fault_thinking_responses.py
src/tests/fixtures/simulated_llm_tool_responses.py