comate-cli 0.12.6b1__tar.gz → 0.12.7__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.
- comate_cli-0.12.7/.python-version +1 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/CHANGELOG.md +45 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/CONTEXT.md +14 -1
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/PKG-INFO +30 -2
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/README.md +27 -0
- comate_cli-0.12.7/bash_settle_diag.log +41 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/distribution.py +2 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/main.py +76 -6
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/mcp_cli.py +191 -50
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/app.py +65 -9
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/backend/session_report.py +24 -7
- comate_cli-0.12.7/comate_cli/terminal_agent/browser_open.py +41 -0
- comate_cli-0.12.7/comate_cli/terminal_agent/clipboard_text.py +126 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/event_renderer.py +117 -18
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/history_printer.py +7 -4
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/i18n/_en.py +51 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/i18n/_ja.py +51 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/i18n/_zh.py +46 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/i18n/message.py +42 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/job_indicator.py +1 -1
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/jobs_menu.py +19 -8
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/jobs_state.py +22 -4
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/logging_adapter.py +21 -0
- comate_cli-0.12.7/comate_cli/terminal_agent/loop_freeze_watchdog.py +160 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/menu_panel.py +48 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/models.py +3 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/marketplace_install_view.py +12 -35
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/plugin_picker.py +2 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/tabs/discover_tab.py +47 -13
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/tabs/installed_tab.py +7 -2
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py +7 -1
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/print_mode.py +15 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/resume_picker.py +13 -52
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/resume_selector.py +6 -25
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/side_install.py +17 -3
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/skills_menu.py +2 -2
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/status_bar.py +9 -9
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/text_effects.py +17 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tips.py +0 -5
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tool_fold.py +33 -3
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tool_result_formatters.py +29 -20
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tool_view.py +5 -5
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui.py +96 -22
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/commands.py +213 -13
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/history_sync.py +39 -13
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/input_behavior.py +15 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/key_bindings.py +27 -0
- comate_cli-0.12.7/comate_cli/terminal_agent/tui_parts/mcp_auth_view.py +276 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/render_panels.py +2 -2
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/shell_mode.py +50 -4
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/ui_mode.py +2 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/update_check.py +243 -76
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/update_messages.py +54 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/pyproject.toml +3 -2
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/conftest.py +40 -0
- comate_cli-0.12.7/tests/fixtures/mcp_stub_stdio_server.py +16 -0
- comate_cli-0.12.7/tests/test_app_disallowed_tools.py +163 -0
- comate_cli-0.12.7/tests/test_app_mcp_needs_auth_hint.py +80 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_print_mode.py +59 -0
- comate_cli-0.12.7/tests/test_app_pty_live_tail.py +196 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_backend_session_report.py +142 -0
- comate_cli-0.12.7/tests/test_clipboard_text.py +147 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_discover_tab.py +148 -4
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer.py +2 -2
- comate_cli-0.12.7/tests/test_event_renderer_bash_background.py +140 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_jobs.py +46 -7
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_mcp_background.py +58 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_streaming.py +137 -6
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_exit_guard.py +13 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_history_printer_styles.py +34 -7
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_history_sync_tool_fold.py +182 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_installed_tab.py +50 -6
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_job_indicator.py +15 -10
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_job_indicator_host.py +29 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_job_indicator_pty.py +6 -5
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_jobs_menu.py +24 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_jobs_state.py +24 -8
- comate_cli-0.12.7/tests/test_live_output_tail.py +52 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_logging_adapter.py +122 -1
- comate_cli-0.12.7/tests/test_loop_freeze_watchdog.py +188 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_main_args.py +102 -1
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_marketplaces_tab.py +31 -3
- comate_cli-0.12.7/tests/test_mcp_auth_panel_pty.py +266 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_mcp_cli.py +207 -68
- comate_cli-0.12.7/tests/test_mcp_cli_auth.py +333 -0
- comate_cli-0.12.7/tests/test_mcp_cli_stdout_encoding.py +123 -0
- comate_cli-0.12.7/tests/test_mcp_panel_auth.py +460 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_mcp_slash_command.py +271 -0
- comate_cli-0.12.7/tests/test_plugin_mcp_keeps_disk_servers.py +185 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_plugin_slash_commands.py +1 -1
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_plugin_tui_components.py +20 -0
- comate_cli-0.12.7/tests/test_print_mode_stdout_encoding.py +141 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_resume_picker.py +53 -107
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_resume_selector.py +47 -3
- comate_cli-0.12.7/tests/test_running_tool_live_tail.py +292 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_selection_menu.py +6 -6
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_shell_mode.py +31 -7
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_side_install.py +66 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_skills_slash_command.py +3 -3
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_status_bar.py +17 -15
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_status_bar_mid_turn_refresh.py +1 -1
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_approval_view.py +23 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_result_formatters.py +62 -1
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_image_path_upgrade.py +35 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_update_check.py +584 -8
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/uv.lock +5 -3
- comate_cli-0.12.6b1/.agent/artifacts/bash/.tmp_bash_gbt0q0oe.txt +0 -1
- comate_cli-0.12.6b1/.agent/artifacts/bash/.tmp_bash_zpllrrwi.txt +0 -16
- comate_cli-0.12.6b1/.agent/artifacts/bash/3b0c312b1a234220818cb8cc15a12ea1565c69dc5f828351a492dab1add0cf84.txt +0 -5
- comate_cli-0.12.6b1/.agent/artifacts/bash/b0696d5d44fdde7597b8e9bd706d61237290ebca0c1c99273799393a7af99316.txt +0 -1
- comate_cli-0.12.6b1/.agent/artifacts/bash/e1164ab5f5f1e125db38bb44420532265c958f19533fbda8700db5a8aa4c3d68.txt +0 -1
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/00f8013ce28fed8e3076db6490d6a3de8dbc1f57f5248a1f5e2710f11ab6849c.txt +0 -71
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/0a5f3319bc1813a523b8d041831399f3ea694fcdb96f4b1df740300d08c60521.txt +0 -103
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/17dc19a9b5faddcd056013e7783c8d23525d060b7b20a73ee241c569bedea6d8.txt +0 -143
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/2b488f719c3431607773d9cebef4924ebfa33745adc68d8ee0f89596c608a218.txt +0 -78
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/32ce175150a77180dda04a76ea66b9ee5b0c46ea0fd0842172bacece964d57a4.txt +0 -154
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/43166c9eb998d1a426ce0c014348e39adc8c8e1d3d7a94ced4cc33ab268ecdeb.txt +0 -64
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/4afc47414280761b7c94ff91f7477c4eb5602396da89303b403c6f3ef9535fd0.txt +0 -161
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/56fca6c3112743a94cd0df58e04ee6dda31546ed53d50f8bf907dccb6f5329d3.txt +0 -81
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/605fcb1ca26d1cb632e364dd044d280a12ad4f188db698d5bad57fe1ff556ce3.txt +0 -88
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/6763a04477b314da76472e76696c8b03ee89fffc23ce74a22c634ea373840acd.txt +0 -60
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/6d1856ff719ee695ed9205cf68723a263f8c70fe090295037c1c9a837f8eac13.txt +0 -78
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/6e08c59431a214d8c3650a701cbaaf9125503d59d28476642f8b5a0ad6c8ed93.txt +0 -98
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/746f6a3b34e30583972816a0052d99e8297096ba522d66027b085e3a0069b7db.txt +0 -69
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/7c8fa2270ca7721e8619ba7eaec744100877330317dd5e8a1e42494a09579317.txt +0 -168
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/7cc3e32a61277dc3e35039fdc1cac3691e147cd50d8d16fa75447de7d11abb77.txt +0 -36
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/8203d4eaf35b0bb224cb12067e638b7f873ae0af05a590adedc02ae159a08099.txt +0 -210
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/82a7ce335091c00f8aee0ff54b6a75ed25fb6f7a2f4bf8d29921c3f2704ada81.txt +0 -156
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/82e9a29128ad224555ae0e85dddcc118d92a8f4faf4c8a3c3702c6b43dc71511.txt +0 -212
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/83be41699a979e16de16f3095981346f337fda56a3c254420df953e2de87d982.txt +0 -6
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/84074b6fda0e110d23094926c0d1846130be2b3870b1bcd5516243bae808b209.txt +0 -258
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/a92368734a2d79c15eaba1c7d282bab2d4150ccde0e41e30628cfb6b7be6a678.txt +0 -76
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/b02349374e026c124a60335b4b0e77698e4b7f8391f2466c827f6f80a8d596b2.txt +0 -239
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/b41279d93d2b1f03e99bf2fdcd4477781edf3546256489e2d37f082fa414ef94.txt +0 -178
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/bde0cfc02d38109cc02a28dd07611e464db9b47fef8b16fc25591866e5003316.txt +0 -87
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/c0e234da2bfe338ffbce547372af90d36ce7580361b69664823d12fac048a86e.txt +0 -4
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/c979b9589e166ae451c819fc8fc1efdf9eb042ce7af99e420a5b540f0d041a7a.txt +0 -305
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/dd39676b55965a3e04c1b28c82cd9c15e335776f39f325f61854d3e48aa87859.txt +0 -8
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/dec1ee9f38d117f649d0ba2cfb54b50d9ccd841833170c49614fa181a358013e.txt +0 -280
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/eac0d88d65c24b10af556c030b795f3312cc70fc80f8f64575205ea1a6476264.txt +0 -223
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/ef063804b585209aafbded7c27ad8d5eacbad17b3bb967022290a9efd01f6d13.txt +0 -182
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/f75a98ad1ac3c085060f90492292060b3720dfa98c776e61a643b9824d1dc237.txt +0 -143
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/faffcd8b4abd87e4abff3b72dcde673e844a4d7e230fbcc5c116ddd11815c37b.txt +0 -249
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/fb29e07995891317ca0daa3257e541238908889bc7a68efeba695c8ac3a2db86.txt +0 -75
- comate_cli-0.12.6b1/.agent/artifacts/grep_content/feed470ec463825f43ae4e1b92a5996b1dbad91605fe491f39c9ee60879b7155.txt +0 -5
- comate_cli-0.12.6b1/.agent/artifacts/index.json +0 -462
- comate_cli-0.12.6b1/.agent/artifacts/ls/5a0a29a96857998fdfe5696c09b9c60027a6529e21108e22a20f5227afeddb59.json +0 -887
- comate_cli-0.12.6b1/.agent/artifacts/tool_result/1678d5b03662385d75eea8d9674f2a8af1eb9ee906ec644544c28c248e5e39f5.txt +0 -1
- comate_cli-0.12.6b1/.agent/artifacts/tool_result/1f093e98c0f4026921bb2df0c7c04d6b55b51ec40c9fbf38ba57bd387399127d.txt +0 -1591
- comate_cli-0.12.6b1/.agent/artifacts/tool_result/57c31009cc3665a6a672811ecf048cfb75ff7bae92598df943f492c53d39ca8e.txt +0 -16
- comate_cli-0.12.6b1/.agent/artifacts/tool_result/70f6daf304e9acdb37057599909444ed6fb2e234a15e5357c59865199123ea8f.txt +0 -1
- comate_cli-0.12.6b1/.agent/artifacts/tool_result/916a2e47f13fd22d3a73a4896c7a5edb3381b8a2c8322ce3ab8a4bf9da94c4a0.txt +0 -17
- comate_cli-0.12.6b1/.agent/artifacts/tool_result/91f5872f5b4b1b43f16589f7dd25e47236a805e848b37307cef464e881307fe1.txt +0 -909
- comate_cli-0.12.6b1/.agent/artifacts/tool_result/9871dc91ff9afef1303c74cf669996828a7db3dbff6c4c41fbac0a53fd7d195b.txt +0 -1766
- comate_cli-0.12.6b1/.agent/artifacts/tool_result/af594562a5579ffc9bef105dc77ed26408b2408447005046c9c6505541e2776a.txt +0 -16
- comate_cli-0.12.6b1/.agent/artifacts/tool_result/c52ec3da48b3a731ed42cc357258a4627d2d11fab5ef14d3050fd50e748151d4.txt +0 -1021
- comate_cli-0.12.6b1/.agent/artifacts/tool_result/f8c08a56feb0812b35a8e4b29a721d38c0aacd83ce3620c432d8b52114c14816.txt +0 -16
- comate_cli-0.12.6b1/.agent/artifacts/tool_result/fa30187a59d255f168806ee0de7a0a32b00535e53e7c5420aad1bac44b54a667.txt +0 -830
- comate_cli-0.12.6b1/tests/test_resume_picker_exit_safety.py +0 -70
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/.agent/scheduled_prompts.json +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/.gitignore +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/__main__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/device_identity.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/animations.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/approval_bridge.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/approval_content_preview.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/assistant_render.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/backend/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/backend/announcements.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/backend/client.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/backend/feedback.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/backend/provider_snapshot.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/backend/rating.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/backend/runtime.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/backend/session_title.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/backend/tasks.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/bash_command_display.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/builtin_commands/.keep +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/builtin_commands/commit.md +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/builtin_commands/implement-plan.md +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/builtin_commands/learn.md +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/builtin_commands/open-pr.md +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/clipboard_image.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/codenames.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/config/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/config/edit_session.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/config/model.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/config/picker.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/config/picker_state.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/config/store.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/config_check.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/console_profile.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/context_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/custom_slash_commands.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/effort_menu.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/effort_ruler.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/effort_style.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/env_utils.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/error_display.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/exit_confirm_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/exit_watchdog.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/figures.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/file_ref_hint.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/focus_events.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/fragment_utils.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/goal_edit_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/goal_resume_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/i18n/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/image_chips.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/input_geometry.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/job_activity.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/layout_coordinator.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/locale.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/logging_file_handler.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/logo.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/markdown_render.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/mcp_serve.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/mention_completer.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/message_style.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/model_tier_style.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/output_style_menu.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/auto_update_runner.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/auto_update_store.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/components/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/components/detail_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/components/plugin_list.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/components/search_box.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/components/tab_bar.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/operation_state.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/tabs/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/plugins/tabs/errors_tab.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/preflight.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/preflight_wizard.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/preflight_wizard_ui.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/question_broker.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/question_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/recap/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/recap/controller.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/resume_preview.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/rpc_commands.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/rpc_relay.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/rpc_stdio.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/rpc_ws.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/scm_request_status.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/selection_menu.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/sigint_guard.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/skill_slash_input.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/slash_commands.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/startup.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/startup_profile.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/statusline/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/statusline/model.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/statusline/picker.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/statusline/picker_state.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/statusline/store.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/stream_pacer.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/suggestion/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/suggestion/controller.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/synchronized_output.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/theme.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tip_highlight.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tool_approval_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tool_fold_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tool_result_state.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tool_result_store.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tool_result_viewer.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/transcript_viewer.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/approval_queue.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/btw_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/mcp_connecting_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/resize_guard.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/run_clock.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/tui_parts/slash_command_registry.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/ultracode_keyword.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/workflows_menu.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_agent/workflows_panel_model.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/terminal_title.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/comate_cli/update_cli.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/docs/cli-rpc-stdio-guide.md +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/docs/release-notes/0.12.3.md +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/docs/startup-performance.md +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/docs/superpowers/plans/2026-07-07-tui-first-repaint-before-sdk-submit.md +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/docs/superpowers/plans/2026-07-07-windows-update-manual-rollback.md +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/_fake_anthropic_server.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/_rpc_ws_client.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/config/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/config/test_config_exit.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/config/test_edit_session.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/config/test_model.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/config/test_picker_state.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/config/test_picker_ui.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/config/test_roundtrip.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/config/test_runtime_settings.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/config/test_skills_denylist_migration.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/config/test_store_load.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/config/test_store_save.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/fixtures/exit_watchdog_child.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/fixtures/fake_mcp_misbehaving_stdout.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/recap/test_idle_recap_controller.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/recap/test_recap_history_rendering.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/recap/test_tui_idle_recap_integration.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/statusline/__init__.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/statusline/test_model.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/statusline/test_picker_state.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/statusline/test_store.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/suggestion/test_next_step_suggestion_controller.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/suggestion/test_next_step_suggestion_render.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/suggestion/test_tab_accepts_next_step_suggestion.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/suggestion/test_tui_next_step_suggestion_integration.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_animations_styles.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_animator_shuffle.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_config_check_gate.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_exit_lifecycle.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_mcp_preload.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_mcp_preload_kick.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_preflight_gate.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_profile_threading.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_pty_ctrl_b.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_pty_ctrl_c_exit.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_pty_shell_mode.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_pty_smoke.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_shutdown.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_startup_latency.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_startup_order.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_token_cost_config.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_app_usage_line.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_approval_bridge.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_approval_content_preview.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_backend_announcements.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_backend_client.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_backend_feedback.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_backend_provider_snapshot.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_backend_rating.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_backend_tasks.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_btw_slash_command.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_builtin_marketplaces.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_busy_slash_gating.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_cli_project_root.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_clipboard_chip_restore.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_clipboard_image_reader.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_commands_system_messages.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_compact_command_semantics.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_completion_context_activation.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_completion_status_panel.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_config_check.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_console_profile.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_context_command.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_context_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_context_view_tool_search.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_ctrl_b_background.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_ctrl_c_clear_input.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_custom_slash_commands.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_device_identity.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_distribution_contract.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_drain_frame_atomicity.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_effort_menu.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_effort_menu_frame_rate.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_effort_ruler.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_effort_slash_command.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_effort_style.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_errors_tab.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_approval_wait.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_boundary.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_budget_floor.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_e2e.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_fixed_overhead.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_idle_prune.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_log_boundary.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_log_queue.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_oversized_tools.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_provider_overflow.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_shell.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_stream_pacing.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_stream_staging.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_tool_args_progress.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_tool_fold.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_event_renderer_tool_search_notice.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_exit_confirm_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_exit_watchdog.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_exit_watchdog_subprocess.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_file_ref_hint.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_focus_events.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_format_error.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_goal_edit_handlers.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_goal_edit_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_goal_paused_hint.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_goal_resume_tui.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_goal_resume_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_goal_slash_command.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_handle_error.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_history_drain_throttle.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_history_printer.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_history_printer_log.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_history_printer_subtitle_position.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_history_printer_tool_fold.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_history_sync.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_i18n.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_image_chip_deletion.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_image_chips.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_image_preprocess_offload_lag.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_import_weight.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_input_behavior.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_input_history.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_input_separator_counter.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_interrupt_exit_semantics.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_job_activity.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_jobs_menu_host.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_jobs_menu_pty.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_key_bindings_system_messages.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_layout_coordinator.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_loading_line_fragments.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_loading_modal_suppression.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_loading_tip_picker.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_logging_file_handler.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_logo.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_main_args_yolo.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_main_profile_entry.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_markdown_render.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_marketplace_add_commands.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_marketplace_install_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_mcp_cli_scope_defaults.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_mcp_jobs_pty.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_mcp_serve.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_mention_completer.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_menu_cursor_unification.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_menu_panel.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_menu_panel_pty.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_message_style.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_modal_freeze_timing.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_modal_panel_visibility.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_model_switch_command.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_model_tier_style.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_no_raw_colors.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_output_style_slash_command.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_permission_mode_cycle.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_plugin_auto_update_runner.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_plugin_auto_update_store.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_plugin_auto_update_tui.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_plugin_operation_state.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_preflight.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_preflight_copilot.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_preflight_wizard_ui.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_print_mode_monitor_cap.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_pty_output_integrity.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_question_broker.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_question_key_bindings.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_question_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_resize_guard.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_resume_preview.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_rewind_command_semantics.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_rpc_mode_logging.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_rpc_relay_dial_out.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_rpc_relay_e2e_smoke.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_rpc_relay_process_smoke.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_rpc_v4_stdio_smoke.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_rpc_v4_ws_smoke.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_rpc_ws_bind_failure.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_run_clock.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_running_tool_status_line.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_scm_request_status.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_scrollback_write_encoding.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_session_auto_title.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_session_query_token_summary.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_settings_write_guard.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_shutdown_noise_guard.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_shutdown_noise_integration.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_sigint_guard.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_sigint_key_binding.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_skill_slash_input.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_slash_add_dir.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_slash_argument_hint.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_slash_clear.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_slash_completer.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_slash_registry.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_startup_import_budget.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_startup_profile.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_status_bar_request_status.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_status_bar_transient.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_stream_pacer.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_stream_pacing_tick.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_stream_staging_panel.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_style_class_coverage.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_synchronized_output.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tab_title.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_task_panel_format.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_task_panel_key_bindings.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_task_panel_rendering.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_task_poll.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_terminal_title.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_theme.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tip_highlight.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tips.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_todo_panel_busy_gating.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_approval_key_bindings.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_approval_tui.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_approval_view_workflow.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_call_protection.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_fold.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_fold_panel.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_fold_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_result_state.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_result_store.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_result_viewer.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_result_viewer_key_bindings.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_view.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tool_view_styles.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_transcript_viewer.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_transcript_viewer_record_matching.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_transcript_viewer_tool_fold.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_builtin_slash_chain.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_deferred_prewarm.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_elapsed_status.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_esc_queue.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_exit_idempotence.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_exit_paced_tail.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_exit_pending_logs.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_hot_reload.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_image_chip_retention.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_image_chip_seed.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_image_paste.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_image_restore.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_image_submit.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_interrupt_queue_recall.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_llm_retry_panel.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_loading_tip_rotation.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_local_interactive_barrier.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_mcp_init_gate.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_paste_history_persistence.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_paste_newline_guard.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_paste_placeholder.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_plugin_load.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_provider_error_shield.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_queue_pop_images.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_queue_preview.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_queue_sdk_source.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_replace_session_resume_hint.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_scheduled_fire_log.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_scratchpad_fold_wiring.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_send_undo_window.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_session_observers.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_shutdown_cancel_propagation.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_split_invariance.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_startup_latency.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_surrogate_repair.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_thinking_display.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_tool_result_registry_lifecycle.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_tui_window_too_small_fallback.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_ui_mode_derivation.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_ui_tick_exception_isolation.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_ultracode_keyword.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_ultracode_keyword_frame_rate.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_ultracode_keyword_submit.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_ultracode_shimmer_render.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_update_cli.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_upstream_surrogate_merge_characterization.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_usage_command.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_wellformed_terminal_input.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_whitelabel_clear_logo.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_windows_sigint_console.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_workflows_menu.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_workflows_menu_host.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_workflows_menu_pty.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_workflows_panel_model.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_wrap_user_text.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tests/test_zipapp_launcher_path.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tools/diagnose_windows_shim_rename.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tools/logo_lab.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tools/nico_preview.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tools/probe_conhost_char_width.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tools/probe_conhost_render_replay.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tools/startup_bench.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tools/transcript_viewer_bench.py +0 -0
- {comate_cli-0.12.6b1 → comate_cli-0.12.7}/tools/verify_windows_self_update_semantics.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
### Added
|
|
6
6
|
|
|
7
|
+
- `--disallowed-tools <names>` 启动参数:本次会话不把这些 tool 发给模型,子 agent 也拿不到(进入 SDK 的 `AgentConfig.disallowed_tools`)。名字逗号分隔,参数可重复,结果按出现顺序合并去重;只认精确名字,MCP tool 写 `mcp__<server>__<tool>`。TUI、`resume`、`--rpc-stdio`、`--rpc-ws`、`--rpc-relay` 都生效(RPC 下对整个进程生效);`-p` 下与它自带的 `SendMessage` 取并集。以下情况都在启动前报错退出:值为空、含 `*`、写了 `Agent` 或 `Skill`(这两个去掉后会话无法创建)、内置名拼错或大小写不对(`mcp__` 开头的名字不检查,MCP 在启动后才连接)。`comate mcp serve` 不支持。
|
|
8
|
+
- 运行中的 Bash 显示 Live Output Tail:模型调用的 Bash 运行时,底部 running-tool 面板每秒读取一次最近输出,在签名行与 Running 状态行之间显示最多 3 个非空行(第一行带 `⎿`),`\r` 覆写的进度条只显示最后一段;`!` 命令活动区从 5 行改为 3 行。两处共用同一套行处理:丢空行、长行按显示宽度截断加 `…` 不折行(中文 / emoji 占 2 列)。命令结束、ctrl+b 转后台或中断后尾部立即消失,不进滚动区;折叠的 Bash 与子 agent 的 Bash 不受影响。
|
|
9
|
+
- Interpreter Migration(macOS/Linux):CLI 不在 Python 3.12 上、并且没有待更新的新版本时,第一次启动在界面之前显示一行提示,之后的启动显示全屏提示,只有「立即迁移」和「跳过」。「立即迁移」把**当前版本**(`<包名>==<当前版本>`,带发行版的安装参数)用 `--python 3.12` 重装,成功后提示重启,本次启动停止;失败只显示一行原因(uv 输出的最后一行),继续在当前 Python 上进入界面。「跳过」不记住,下次启动再问。已经在 3.12、editable 安装、PATH 里没有 uv、Windows 都不提示;有待更新的新版本时只显示更新提示(接受更新会顺带迁移到 3.12)。文案四种语言齐全。
|
|
10
|
+
- 白牌 Python 下载镜像:发行版 profile 的 `UpdateSource` 新增可选字段 `python_install_mirror`。设置后,CLI 运行的 uv 安装命令(macOS/Linux 的 Self-Update 与 Interpreter Migration、Windows 旁装)在子进程环境里设 `UV_PYTHON_INSTALL_MIRROR` 为这个值,不看 locale,并且盖过简中用户的 npmmirror;用户自己设置的 `UV_PYTHON_INSTALL_MIRROR` 仍然优先。Windows 降级给出手动命令时,命令上方多出 PowerShell 与 CMD 两种设置镜像的写法,命令本身不变;文案四种语言齐全。公网 comate 不设置这个字段,行为不变(ADR 0056)。
|
|
11
|
+
- Event loop 冻结看门狗:界面动画 / 计时停住超过 2 秒时,独立线程把主线程当时的调用栈连同最近的首轮阶段名、busy / staging / 动画状态写进 `~/.comate/logs/agent.log`(WARNING),同一次冻结在 2 秒、5 秒、15 秒各记一次;默认开启,设 `COMATE_TUI_LOOP_WATCHDOG=0` 关闭。原有的「TUI event loop lag detected」日志现在带阶段名,且空闲态(无请求、无动画)的停顿超过 2 秒也记一条 INFO,不再静默(阈值 `AGENT_SDK_TUI_EVENT_LOOP_IDLE_LAG_THRESHOLD_S`)。此前冻结日志只能说明停了多久,说不出停在哪,多次 3–37 秒冻结因此无法归因。
|
|
7
12
|
- 思考时长:隐藏 thinking 时,一段思考正常结束后,loading 行括号里的呼吸黄 badge 换成静态暗灰的时长短语,显示 3 秒后消失。短语与 badge 逐档对应:`thought for 8s with high effort`(max / xhigh / high 同句式)、`ultra thought for 8s`、`thought for 8s`(medium / 无生效档)、`thought briefly for 8s`(low);60 秒及以上显示 `1m 5s`。不足 1 秒、中断、stream 重试、思考中途打开 thinking 显示、turn 结束时都不显示。固定英文,不随界面语言变化;不写 scrollback。
|
|
8
13
|
- MCP 工具搜索(SDK):MCP 工具很多时,工具 schema 改为按需加载——模型先只看到工具名清单,需要时调用内置 `ToolSearch` 加载,下一步才能调用该工具。默认 `auto`(延迟候选 schema ≥ 生效窗口 10% 且数量 ≥ 30 时启用),可用环境变量 `COMATE_AGENT_SDK_TOOL_SEARCH`(`auto` / `auto:P` / `auto:P:C` / `on` / `off`)调整。首次启用时终端提示一次;`/context` 拆分显示 MCP 工具与已加载 / 延迟候选数;单个 MCP 工具定义超过窗口 5% 时启动后警告。comate-cli 与 comate-rpc 的 `comate-agent-sdk` 下限抬到 0.12.20(SDK 同步升版,新事件 `ToolSearchEnabledEvent`)。
|
|
9
14
|
- 规则双目录(SDK):条件规则(带 `paths:` 的规则文件)现在也从项目 `.claude/rules/` 与用户 `~/.claude/rules/` 读取,Claude Code 里配好的路径规则搬到 comate 下直接生效——Read 命中路径注入 reminder,Edit / Write 预检同样拦截注入;user 层受 user setting source 门控,项目层受 project 门控。同一层级内 `.agent/rules` 与 `.claude/rules` 的同名文件(按相对路径)只加载 `.agent` 那份,被遮蔽路径记 info 日志;用户层与项目层之间不去重,两份都加载。`paths` 支持逗号分隔字符串(`paths: "src/**, lib/**"` 拆成多个模式,剥掉首尾空白与引号),YAML 列表形式不变;rules 目录下指向目录的符号链接跟进(做环检测,同一真实目录只进一次);`.agents/rules/` 不读。目录、去重、逗号、符号链接四项改动作用在统一扫描入口上,常驻规则同样受益。
|
|
@@ -70,6 +75,11 @@
|
|
|
70
75
|
|
|
71
76
|
### Changed
|
|
72
77
|
|
|
78
|
+
- Self-Update 不再把用户换到 Python 3.12:`comate update`、启动时的「立即更新」、Windows 旁装,以及 Windows 手动修复命令,uv 命令里的 `--python` 改为当前解释器的 `主版本.次版本`(例如在 3.13 上运行就带 `--python 3.13`),更新后留在原来的 Python 上。命令仍然带 `--python`,否则 `--force` 重装会漂到 uv 默认找到的解释器上。不在 `requires-python` 范围内的解释器(例如 3.14)也照样保持。白牌发行版在 `install_args` 里自己指定了 `--python` 时仍以白牌为准,可以用它固定版本(例如 `"--python", "3.13.12"`)。决策见 ADR 0064。
|
|
79
|
+
- 状态栏的 Job Indicator 只统计正在运行的后台 job:后台 subagent 跑完一轮进入待命(idle)后,不再显示 `x agent`;1 个运行中、2 个待命时显示 `1 agent`。待命的 agent 仍可在 `/ps` 里查看和停止,退出确认仍会提示它们(ADR 0050 补充)。
|
|
80
|
+
- Self-Update 固定到 Python 3.12:`comate update`、启动时的「立即更新」、Windows 旁装,以及 Windows 自动路径不可用时显示的手动修复命令,都让新版本装在 Python 3.12 上(uv 命令带 `--python 3.12`;机器上没有 3.12 时 uv 会自动下载)。原因:uv 在读包之前就选好解释器,并且忽略 `requires-python` 的上限,所以以前用户会跑在 3.11 / 3.13 / 3.14 等不同版本上,而且不带 `--python` 的重装会把已经在 3.12 上的环境换成别的版本。白牌发行版在 `install_args` 里自己指定了 `--python` 时,以白牌的为准。`requires-python` 不变,3.11–3.13 继续支持。决策见 ADR 0055。
|
|
81
|
+
- 简中用户更新时,uv 需要下载的 Python 改走国内镜像(npmmirror 的 python-build-standalone),不再依赖 GitHub;进程内重装和 Windows 旁装都生效。你自己设置了 `UV_PYTHON_INSTALL_MIRROR` 时以你的为准;其他语言环境不变。
|
|
82
|
+
- resume 选择器的预览键由 Ctrl+V 改为 Ctrl+A:VS Code、Windows Terminal 等终端把 Ctrl+V 截成粘贴,按下后剪贴板文本会落进搜索框,进不了预览。搜索模式下也可以按 Ctrl+A 预览,Esc 或再按 Ctrl+A 关闭后回到搜索框,搜索词保持不变;代价是搜索框内 Ctrl+A 不再移到行首。
|
|
73
83
|
- 0.12.4 测试版里的随包 `/pr`(别名 `/mr`)改名为 `/open-pr`(别名 `/open-mr`),功能不变。原因:`pr` 是常见的第三方 skill 名,旧名会挡住用户自己装的同名 skill。`/pr`、`/mr` 不再有效,也没有改名提示。
|
|
74
84
|
- 用户装的 skill 现在可以覆盖同名的随包命令(`/commit`、`/learn`、`/implement-plan`、`/open-pr` 等):`/<名字>` 调用 skill,不提示,和 project/user 自定义命令覆盖随包命令一样。skill 只占了随包命令的某个别名时,随包命令只失去这个别名。skill 被禁用或随插件卸载后,随包命令自动回来。`user-invocable: false` 的 skill 不占名字。核心命令(`/help`、`/model` 等)与用户自己写的同名自定义命令仍然优先于 skill;这种冲突改为每个名字每个进程只提示一次(以前每次启动、切换会话、加载插件都会输出一条英文 WARNING),提示按界面语言显示,并说明模型仍可以通过 Skill 工具调用这个 skill。见 ADR-0038。
|
|
75
85
|
- 思考被折叠时,loading 行括号里的呼吸黄短语不再随机挑,改为按这次请求真实生效的思考档位挑词:ultracode → `ultra thinking`、max / xhigh / high → `thinking some more with <档位> effort`(如 `thinking some more with high effort`)、medium → `thinking`、low → `light thinking`;auto 且模型无默认档、模型不支持调档、off 时显示 `thinking`,不再出现低档却显示 `ultra thinking` 的情况。档位取端点降档后的实际值(与 statusline 一致),每次请求开始思考时读一次,一轮中途开 ultracode 后下一次请求即生效。颜色、位置、出现时机不变;短语在中文 / 日文界面下也保持英文。
|
|
@@ -91,8 +101,43 @@
|
|
|
91
101
|
以及设计稿 docs/superpowers/specs/2026-05-18-auto-compact-awareness-design.md
|
|
92
102
|
已写的写法对齐,少占两列宽。
|
|
93
103
|
|
|
104
|
+
### Removed
|
|
105
|
+
|
|
106
|
+
- Interpreter Migration(macOS/Linux):启动时不再提示把当前版本迁移到 Python 3.12。不在 3.12 上的用户继续在当前 Python 上运行,下一次 Self-Update 时装到 3.12(Self-Update 仍然带 `--python 3.12`,ADR 0055)。以前写进设置的 `migration_hinted_python` 不再读取,留在文件里不影响任何行为。
|
|
107
|
+
|
|
94
108
|
### Fixed
|
|
95
109
|
|
|
110
|
+
- 输入框里 `@` 一个图片文件后不再变成 `[Pasted image #N: 文件名]`:路径落在 `@` 引用里时(补全、手打、
|
|
111
|
+
粘贴都算)保持 `@path` 文本,和其他 `@文件` 一样只给模型路径提示,模型需要时自己用 Read 看图。
|
|
112
|
+
前面没有 `@` 的粘贴 / 拖入图片路径仍然变成图片 chip;`@a.png /tmp/b.png` 这样的混合粘贴整段保持文本。
|
|
113
|
+
- `@path` 路径提示(SDK)按 Read 工具的分类输出:图片显示 `image (.png, 120 KB)`,PDF 显示
|
|
114
|
+
`pdf (.pdf, 2.1 MB)`,二进制文件显示 `binary (.zip, 3.2 MB)`,不再给这些文件数「行数」
|
|
115
|
+
(此前 png 会显示成 `file (.png, 464 lines)`)。二进制判断和 Read 用同一份规则(后缀黑名单 + 前 8 KB
|
|
116
|
+
内容扫描,带文本 BOM 的不算),规则从 Read 工具内部移到 `system_tools/text_codec.py`,Read 行为不变。
|
|
117
|
+
- 模型回复的正文末尾带多个换行时(常见于调用工具之前),scrollback 中正文和下一行之间不再出现长空白:
|
|
118
|
+
显示层丢掉正文段末尾的空行,正文中间连续的多个空行只显示 1 个;代码块内的空行原样保留。
|
|
119
|
+
只改显示,transcript 与发给模型的上下文中的原文不变。
|
|
120
|
+
- git 不在 PATH 时,SDK 采集 GIT_ENV 发出的 WARNING「未找到 git 可执行文件,无法采集 GIT_ENV」不再刷进
|
|
121
|
+
TUI scrollhistory:终端用户看到也无法在会话里行动(装 git / 修 PATH 都在会话外)。文件日志
|
|
122
|
+
(`~/.comate/logs/agent.log`)与其它宿主不受影响;同一来源的「执行 git 命令失败」ERROR 是未预期异常,
|
|
123
|
+
仍然显示。
|
|
124
|
+
- 装了带 `.mcp.json` 的插件后,TUI 会话丢失全部用户 MCP server:启动注入插件时,插件 server 被写进
|
|
125
|
+
`AgentConfig.mcp_servers`,legacy 解析模式下这等于「只用这些 server」,user / project / local 三层
|
|
126
|
+
`.mcp.json` 全部失效;随后的重新加载关闭了已连上的 server,移除了它们的工具,`/mcp` 里显示
|
|
127
|
+
`Not initialized`。`-p` 与 `comate mcp list` 不加载插件,不受影响。现在 CLI 使用 merge 解析模式,
|
|
128
|
+
插件 server 写进 plugin 层,叠加在磁盘三层之下(同名时磁盘优先);`/reload-plugins` 只移除插件 server。
|
|
129
|
+
没有插件时解析结果不变(ADR 0057)。
|
|
130
|
+
- 插件 `.mcp.json` 用 Claude Code 生态的 `{"mcpServers": {...}}` 包装格式时(例如 Anthropic 的 `data`
|
|
131
|
+
插件),解析出一个假 server `<插件名>:mcpServers`(`stdio server 缺少 command`),里面的 server 一个也连不上。
|
|
132
|
+
现在顶层 `mcpServers` 是对象时读它里面的内容,平铺格式不变,两种都加 `<插件名>:` 前缀。`/mcp` 列表现在
|
|
133
|
+
也显示插件 server:状态、工具,详情页显示来源插件和插件的 `.mcp.json` 路径。插件 server 可以在 `/mcp`
|
|
134
|
+
里 Disable:在 `~/.agent/.mcp.json` 写一条同名 `{"enabled": false}`,重启后仍然禁用,插件本身和其他
|
|
135
|
+
server 不受影响;Enable 删除这一条(插件已卸载后留下的这一条也能在 `/mcp` 里 Enable 清掉)。插件 server 的单个工具开关仍为只读。新文案三语齐全。
|
|
136
|
+
- 插件 `plugin.json` 里写的 `mcpServers` 以前被悄悄忽略,现在生效:可以是内联对象,也可以是相对插件根目录的
|
|
137
|
+
JSON 文件路径(字符串或字符串数组,文件格式同 `.mcp.json`),和插件的 `.mcp.json` 合并,都加 `<插件名>:`
|
|
138
|
+
前缀;同名时 `.mcp.json` 优先并在日志里打 WARNING。路径超出插件根目录、文件读不了、值类型不对时打 WARNING
|
|
139
|
+
跳过这一项,插件其他内容照常加载;插件 MCP 配置文件顶层不是 JSON 对象时也改为跳过,不再让整个插件加载失败。
|
|
140
|
+
`/mcp` 详情页对这些 server 仍显示插件 `.mcp.json` 路径(待修)。
|
|
96
141
|
- 切换窗口后运行中的任务被中断、输入框多出 `[O[I`:终端开着焦点上报(DECSET 1004,
|
|
97
142
|
例如 Windows PowerShell 经 ssh 连到远程服务器)时,窗口失焦 / 得焦会发 `ESC[O` / `ESC[I`。
|
|
98
143
|
prompt_toolkit 不认识这两条序列,把它们拆成 Esc 加两个普通字符,Esc 就中断了本轮。
|
|
@@ -13,7 +13,7 @@ _Avoid_: menu output(菜单输出), history block(历史块), 全屏 pic
|
|
|
13
13
|
_Avoid_: footer(Menu Panel 自己有页脚), bottom toolbar(prompt_toolkit 的术语,本项目不使用), 补全状态行(与 Status Bar 共用同一个位置,但是另一个东西)
|
|
14
14
|
|
|
15
15
|
**Job Indicator(后台任务指示)**:
|
|
16
|
-
Status Bar 左列里按类别显示的后台 job 数量,例如 `2 agents`、`1 shell`、`1 workflow`、`1 MCP call`。类别:agents(agent job)、shells(bash 与 monitor job)、workflows(workflow job)、mcp(MCP
|
|
16
|
+
Status Bar 左列里按类别显示的后台 job 数量,例如 `2 agents`、`1 shell`、`1 workflow`、`1 MCP call`。类别:agents(agent job)、shells(bash 与 monitor job)、workflows(workflow job)、mcp(MCP 后台调用)。只统计仍在运行的 job,待命(idle)的 job 不计(它们仍在 Jobs Menu 里);数量为 0 的类别不显示。选中一个 Job Indicator 并确认,会打开该类别的菜单。它取代了输入框上方常驻的 jobs 面板。
|
|
17
17
|
_Avoid_: pill(口头说法), jobs 面板(已删除的旧区域), 后台任务栏
|
|
18
18
|
|
|
19
19
|
**Jobs Menu(后台任务菜单)**:
|
|
@@ -194,6 +194,10 @@ _Avoid_: marketplace url (too narrow), repo (only one of the forms)
|
|
|
194
194
|
A registered plugin source, named by its own manifest rather than by whatever the user typed. One Marketplace Source resolves to at most one Marketplace, however it is spelled.
|
|
195
195
|
_Avoid_: plugin store, registry (the registry is the collection of Marketplaces)
|
|
196
196
|
|
|
197
|
+
**Effective Installation**:
|
|
198
|
+
An installed-plugin record that applies to the current project: either a user-scope record, or a local-scope record whose project path is the current project. A local-scope record for another project is not an Effective Installation here, even though it exists in the registry.
|
|
199
|
+
_Avoid_: installed (ambiguous: the registry may hold records that do not apply here), known plugin
|
|
200
|
+
|
|
197
201
|
## CLI Self-Update Language
|
|
198
202
|
|
|
199
203
|
**Self-Update**:
|
|
@@ -326,6 +330,10 @@ _Avoid_: todo panel, tasklist (spoken shorthand only)
|
|
|
326
330
|
A state in which the run is alive but does not advance any task: context compaction in progress, or an LLM retry backoff countdown. Only the countdown counts as Stall Status; the retried request itself does not.
|
|
327
331
|
_Avoid_: blocking status ("blocking" in this repo means blocking the event loop), waiting state
|
|
328
332
|
|
|
333
|
+
**Live Output Tail**:
|
|
334
|
+
The last 3 non-empty lines of a running foreground shell command's output, shown under that command in the bottom interaction band and refreshed once per second. It applies to the user's `!` commands and to the main agent's Bash calls that show a `Running…` line; folded Bash calls and subagent Bash calls have none. It is transient: it never enters scrollback, the transcript, or the model's context, and it disappears when the command ends or moves to the background.
|
|
335
|
+
_Avoid_: staging (that is the stream staging window), live log, output streaming
|
|
336
|
+
|
|
329
337
|
## Event Loop Health Language
|
|
330
338
|
|
|
331
339
|
**Event Loop Lag**:
|
|
@@ -375,10 +383,13 @@ _Avoid_: lag log, profiler output (the profiler records phase durations, not a s
|
|
|
375
383
|
|
|
376
384
|
- A **Marketplace** takes its name from its manifest, never from the **Marketplace Source** the user typed; duplicate detection therefore compares resolved sources, not names or spellings.
|
|
377
385
|
- Adding a **Marketplace** is never silent: the user confirms the **Marketplace Source** once before any clone or download starts, whether the source was typed into the panel or prefilled from a slash command argument.
|
|
386
|
+
- Every plugin panel that reports "installed" (a checkmark, a count, a list of installed plugins) means **Effective Installation** for the current project, and uses the same rule the plugin loader uses to decide what to load. Registry membership alone never counts as installed.
|
|
387
|
+
- Manual plugin update and **Plugin Auto Update** act on a plugin key, not on an **Effective Installation**: every record under that key (the user-scope record and every project's local-scope record) moves to the same version together. Display is per project; update is per plugin. There is no per-project version.
|
|
378
388
|
|
|
379
389
|
- **Self-Update** and **Plugin Auto Update** are separate concepts with separate vocabularies: a **Version Check** orders versions, plugin **Update Detection** only compares for equality. Neither triggers the other.
|
|
380
390
|
- A **Side-Install** followed by an **Entrypoint Flip** is one Self-Update strategy; an in-process reinstall of the current installation is another. Which one applies is a property of the platform, not of the user's choice.
|
|
381
391
|
- **Restart-to-Apply** holds for every Self-Update strategy and mirrors the plugin **Update Effectiveness Boundary**: on-disk state changes, the running process does not.
|
|
392
|
+
- **Self-Update** keeps the installation on the interpreter it runs on: every uv install command requests the running `major.minor` (ADR 0064), unless the distribution profile's `install_args` already pins `--python`. There is no target Python; a CLI moves to another interpreter only when a whitelabel pin asks for it.
|
|
382
393
|
|
|
383
394
|
- A **Session Title** is a fact of the session, not of the **Session Report**: it exists whether or not a report backend is configured, and the report only mirrors it. **Durable Title Completion** is therefore judged from the session's own metadata.
|
|
384
395
|
- A **Session Title** is generated from the session's earliest **Committed Title Input**, never from the latest one. A resumed session without a title is titled from its original first input, so the title does not change to whatever was typed after resume.
|
|
@@ -405,6 +416,8 @@ _Avoid_: lag log, profiler output (the profiler records phase durations, not a s
|
|
|
405
416
|
|
|
406
417
|
## Flagged ambiguities
|
|
407
418
|
|
|
419
|
+
- "staging" 只指 stream staging window(模型正文提交到 scrollback 之前的暂存区)。运行中工具下面的 `Running…` 区域不叫 staging;那里显示的 shell 输出尾部叫 **Live Output Tail**。
|
|
420
|
+
|
|
408
421
|
- 代码里的 `_menu_panel_active()` 实际含义是“使用共享 `MenuPanel` 外壳”,不含 `/statusline`、marketplace 安装、`/goal edit`,因此与本术语表的 **Menu Panel**(slash 命令打开的暂态操作界面)并不等价。判断 **Status Bar** 是否隐藏另用独立集合,不复用它。
|
|
409
422
|
|
|
410
423
|
- OpenWorker still shows `HIGH` as **Max** (ADR-0017/0019); the agreed family-wide name is **Elite** (ADR-0023). Until OpenWorker is updated, the same Provider-Pool Level has two display names across products.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: comate-cli
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.7
|
|
4
4
|
Summary: Comate terminal CLI built on comate-agent-sdk
|
|
5
5
|
Project-URL: Homepage, https://github.com/AndyLee1024/agent-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/AndyLee1024/agent-sdk
|
|
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
16
|
Requires-Python: <3.14,>=3.11
|
|
17
17
|
Requires-Dist: charset-normalizer==3.4.7
|
|
18
|
-
Requires-Dist: comate-agent-sdk<0.13,>=0.12.
|
|
18
|
+
Requires-Dist: comate-agent-sdk<0.13,>=0.12.24
|
|
19
19
|
Requires-Dist: comate-rpc<0.2,>=0.1.4
|
|
20
20
|
Requires-Dist: concurrent-log-handler>=0.9.25
|
|
21
21
|
Requires-Dist: curl-cffi==0.13.0
|
|
@@ -23,6 +23,7 @@ Requires-Dist: httpx<0.29.0,>=0.28.1
|
|
|
23
23
|
Requires-Dist: packaging>=21.0
|
|
24
24
|
Requires-Dist: pillow==12.2.0
|
|
25
25
|
Requires-Dist: prompt-toolkit>=3.0
|
|
26
|
+
Requires-Dist: pygments>=2.19
|
|
26
27
|
Requires-Dist: requests==2.32.5
|
|
27
28
|
Requires-Dist: rich>=14.0
|
|
28
29
|
Requires-Dist: setproctitle>=1.3.7
|
|
@@ -45,6 +46,33 @@ uv tool install comate-cli
|
|
|
45
46
|
comate
|
|
46
47
|
```
|
|
47
48
|
|
|
49
|
+
### 简体中文用户
|
|
50
|
+
|
|
51
|
+
Python 解释器从 npmmirror 下载,包从清华 PyPI 镜像下载,运行时固定为 Python 3.12(ADR 0055)。
|
|
52
|
+
|
|
53
|
+
macOS / Linux(bash、zsh):
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
UV_PYTHON_INSTALL_MIRROR=https://registry.npmmirror.com/-/binary/python-build-standalone \
|
|
57
|
+
uv tool install comate-cli --python 3.12 --default-index https://pypi.tuna.tsinghua.edu.cn/simple
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Windows PowerShell(两行在同一个窗口里运行):
|
|
61
|
+
|
|
62
|
+
```powershell
|
|
63
|
+
$env:UV_PYTHON_INSTALL_MIRROR="https://registry.npmmirror.com/-/binary/python-build-standalone"
|
|
64
|
+
uv tool install comate-cli --python 3.12 --default-index https://pypi.tuna.tsinghua.edu.cn/simple
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Windows CMD(两行在同一个窗口里运行):
|
|
68
|
+
|
|
69
|
+
```bat
|
|
70
|
+
set "UV_PYTHON_INSTALL_MIRROR=https://registry.npmmirror.com/-/binary/python-build-standalone"
|
|
71
|
+
uv tool install comate-cli --python 3.12 --default-index https://pypi.tuna.tsinghua.edu.cn/simple
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
清华镜像同步 PyPI 有延迟。新版本刚发布时,如果清华上还没有,去掉 `--default-index ...` 直接从官方 PyPI 安装即可,Python 仍走 npmmirror。
|
|
75
|
+
|
|
48
76
|
## 内置 Marketplace 扩展
|
|
49
77
|
|
|
50
78
|
发行版可通过 `DistributionProfile.builtin_marketplaces` 提供
|
|
@@ -15,6 +15,33 @@ uv tool install comate-cli
|
|
|
15
15
|
comate
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
### 简体中文用户
|
|
19
|
+
|
|
20
|
+
Python 解释器从 npmmirror 下载,包从清华 PyPI 镜像下载,运行时固定为 Python 3.12(ADR 0055)。
|
|
21
|
+
|
|
22
|
+
macOS / Linux(bash、zsh):
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
UV_PYTHON_INSTALL_MIRROR=https://registry.npmmirror.com/-/binary/python-build-standalone \
|
|
26
|
+
uv tool install comate-cli --python 3.12 --default-index https://pypi.tuna.tsinghua.edu.cn/simple
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Windows PowerShell(两行在同一个窗口里运行):
|
|
30
|
+
|
|
31
|
+
```powershell
|
|
32
|
+
$env:UV_PYTHON_INSTALL_MIRROR="https://registry.npmmirror.com/-/binary/python-build-standalone"
|
|
33
|
+
uv tool install comate-cli --python 3.12 --default-index https://pypi.tuna.tsinghua.edu.cn/simple
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Windows CMD(两行在同一个窗口里运行):
|
|
37
|
+
|
|
38
|
+
```bat
|
|
39
|
+
set "UV_PYTHON_INSTALL_MIRROR=https://registry.npmmirror.com/-/binary/python-build-standalone"
|
|
40
|
+
uv tool install comate-cli --python 3.12 --default-index https://pypi.tuna.tsinghua.edu.cn/simple
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
清华镜像同步 PyPI 有延迟。新版本刚发布时,如果清华上还没有,去掉 `--default-index ...` 直接从官方 PyPI 安装即可,Python 仍走 npmmirror。
|
|
44
|
+
|
|
18
45
|
## 内置 Marketplace 扩展
|
|
19
46
|
|
|
20
47
|
发行版可通过 `DistributionProfile.builtin_marketplaces` 提供
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
2026-11-02 12:52:02,880 platform=Linux-7.0.0-30-generic-x86_64-with-glibc2.43 python=3.13.18 psutil=7.2.2
|
|
2
|
+
2026-11-02 12:52:02,880 bash=/bin/bash cwd=/tmp/claude-1000/-home-andy-works-agent-sdk/81e18132-c517-4c2e-a0a5-45ee51dd802e/scratchpad output_dir=/tmp/claude-1000/-home-andy-works-agent-sdk/81e18132-c517-4c2e-a0a5-45ee51dd802e/scratchpad/.agent/artifacts/bash runs=1
|
|
3
|
+
2026-11-02 12:52:02,881 process count=393
|
|
4
|
+
2026-11-02 12:52:02,881 step 列:loop = 在 event loop 线程同步执行(生产现状);thread = 在 daemon 线程执行(候选修法)
|
|
5
|
+
2026-11-02 12:52:02,911 run=1 loop script mkstemp+write+close duration_ms= 0.1 loop_max_gap_ms= 10.3 result=.tmp_bash_script_s89rx0gd.sh
|
|
6
|
+
2026-11-02 12:52:02,943 run=1 loop output mkstemp duration_ms= 0.1 loop_max_gap_ms= 10.3 result=.tmp_bash_pt593nyv.txt
|
|
7
|
+
2026-11-02 12:52:02,973 run=1 loop cwd mkstemp duration_ms= 0.1 loop_max_gap_ms= 10.2 result=.tmp_bash_cwd_zr16nfyp.txt
|
|
8
|
+
2026-11-02 12:52:02,996 run=1 thread command run (spawn+exit, thread) duration_ms= 21.9 loop_max_gap_ms= 11.6 result=exit=0 pump_alive=False
|
|
9
|
+
2026-11-02 12:52:03,027 run=1 loop exited root: psutil.Process(pid) duration_ms= 0.3 loop_max_gap_ms= 10.3 NoSuchProcess: process PID not found (pid=96922)
|
|
10
|
+
2026-11-02 12:52:03,059 run=1 loop exited root: children(recursive=True) duration_ms= 0.0 loop_max_gap_ms= 10.4 result=skipped: root process already gone
|
|
11
|
+
2026-11-02 12:52:03,090 run=1 loop exited root: kill() duration_ms= 0.0 loop_max_gap_ms= 10.4 result=skipped: root process already gone
|
|
12
|
+
2026-11-02 12:52:03,141 run=1 loop exited root: _ppid_map() duration_ms= 19.3 loop_max_gap_ms= 19.3 result=dict[393]
|
|
13
|
+
2026-11-02 12:52:03,195 run=1 thread exited root: psutil.Process(pid) duration_ms= 0.3 loop_max_gap_ms= 10.3 NoSuchProcess: process PID not found (pid=96927)
|
|
14
|
+
2026-11-02 12:52:03,227 run=1 thread exited root: children(recursive=True) duration_ms= 0.4 loop_max_gap_ms= 10.6 result=skipped: root process already gone
|
|
15
|
+
2026-11-02 12:52:03,259 run=1 thread exited root: kill() duration_ms= 0.8 loop_max_gap_ms= 10.6 result=skipped: root process already gone
|
|
16
|
+
2026-11-02 12:52:03,310 run=1 thread exited root: _ppid_map() duration_ms= 19.9 loop_max_gap_ms= 10.5 result=dict[393]
|
|
17
|
+
2026-11-02 12:52:03,645 run=1 loop live root: psutil.Process(pid) duration_ms= 0.3 loop_max_gap_ms= 10.4 result=96936
|
|
18
|
+
2026-11-02 12:52:03,684 run=1 loop live root: children(recursive=True) duration_ms= 7.5 loop_max_gap_ms= 10.4 result=list[0]
|
|
19
|
+
2026-11-02 12:52:03,715 run=1 loop live root: kill() duration_ms= 0.1 loop_max_gap_ms= 10.3 result=1
|
|
20
|
+
2026-11-02 12:52:03,756 run=1 loop live root: _ppid_map() duration_ms= 9.1 loop_max_gap_ms= 10.5 result=dict[394]
|
|
21
|
+
2026-11-02 12:52:03,788 run=1 loop unlink x3 duration_ms= 0.1 loop_max_gap_ms= 10.3 result=3
|
|
22
|
+
2026-11-02 12:52:03,788 ---- summary (max over 1 runs) ----
|
|
23
|
+
2026-11-02 12:52:03,789 loop exited root: _ppid_map() median_ms= 19.3 max_ms= 19.3 loop_max_gap_ms= 19.3
|
|
24
|
+
2026-11-02 12:52:03,789 thread command run (spawn+exit, thread) median_ms= 21.9 max_ms= 21.9 loop_max_gap_ms= 11.6
|
|
25
|
+
2026-11-02 12:52:03,789 thread exited root: children(recursive=True) median_ms= 0.4 max_ms= 0.4 loop_max_gap_ms= 10.6
|
|
26
|
+
2026-11-02 12:52:03,789 thread exited root: kill() median_ms= 0.8 max_ms= 0.8 loop_max_gap_ms= 10.6
|
|
27
|
+
2026-11-02 12:52:03,789 thread exited root: _ppid_map() median_ms= 19.9 max_ms= 19.9 loop_max_gap_ms= 10.5
|
|
28
|
+
2026-11-02 12:52:03,789 loop live root: _ppid_map() median_ms= 9.1 max_ms= 9.1 loop_max_gap_ms= 10.5
|
|
29
|
+
2026-11-02 12:52:03,790 loop exited root: children(recursive=True) median_ms= 0.0 max_ms= 0.0 loop_max_gap_ms= 10.4
|
|
30
|
+
2026-11-02 12:52:03,790 loop exited root: kill() median_ms= 0.0 max_ms= 0.0 loop_max_gap_ms= 10.4
|
|
31
|
+
2026-11-02 12:52:03,790 loop live root: psutil.Process(pid) median_ms= 0.3 max_ms= 0.3 loop_max_gap_ms= 10.4
|
|
32
|
+
2026-11-02 12:52:03,790 loop live root: children(recursive=True) median_ms= 7.5 max_ms= 7.5 loop_max_gap_ms= 10.4
|
|
33
|
+
2026-11-02 12:52:03,790 loop script mkstemp+write+close median_ms= 0.1 max_ms= 0.1 loop_max_gap_ms= 10.3
|
|
34
|
+
2026-11-02 12:52:03,790 loop output mkstemp median_ms= 0.1 max_ms= 0.1 loop_max_gap_ms= 10.3
|
|
35
|
+
2026-11-02 12:52:03,790 loop exited root: psutil.Process(pid) median_ms= 0.3 max_ms= 0.3 loop_max_gap_ms= 10.3
|
|
36
|
+
2026-11-02 12:52:03,790 thread exited root: psutil.Process(pid) median_ms= 0.3 max_ms= 0.3 loop_max_gap_ms= 10.3
|
|
37
|
+
2026-11-02 12:52:03,791 loop live root: kill() median_ms= 0.1 max_ms= 0.1 loop_max_gap_ms= 10.3
|
|
38
|
+
2026-11-02 12:52:03,791 loop unlink x3 median_ms= 0.1 max_ms= 0.1 loop_max_gap_ms= 10.3
|
|
39
|
+
2026-11-02 12:52:03,791 loop cwd mkstemp median_ms= 0.1 max_ms= 0.1 loop_max_gap_ms= 10.2
|
|
40
|
+
2026-11-02 12:52:03,794 log: /home/andy/works/agent-sdk/packages/comate_cli/bash_settle_diag.log
|
|
41
|
+
2026-11-02 12:52:03,794 json: /home/andy/works/agent-sdk/packages/comate_cli/bash_settle_diag.json
|
|
@@ -38,6 +38,8 @@ class UpdateSource:
|
|
|
38
38
|
fetch_latest: LatestVersionFetcher
|
|
39
39
|
install_args: tuple[str, ...] = ()
|
|
40
40
|
release_notes_url: str | None = None
|
|
41
|
+
# Python 下载镜像(UV_PYTHON_INSTALL_MIRROR),盖过简中 locale 的 npmmirror(ADR 0056)。
|
|
42
|
+
python_install_mirror: str | None = None
|
|
41
43
|
|
|
42
44
|
def __post_init__(self) -> None:
|
|
43
45
|
if not callable(self.fetch_latest):
|
|
@@ -94,9 +94,10 @@ _SYSTEM_PROMPT_OPTIONS: dict[str, str] = {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
# (rpc_stdio, resume_session_id, resume_select, print_prompt, output_format, prompt_flags, rpc_relay,
|
|
97
|
-
# add_dirs, rpc_ws_port, yolo);rpc_ws_port 为 None 表示不是 --rpc-ws,0 表示由系统挑空闲端口;
|
|
97
|
+
# disallowed_tools, add_dirs, rpc_ws_port, yolo);rpc_ws_port 为 None 表示不是 --rpc-ws,0 表示由系统挑空闲端口;
|
|
98
98
|
# rpc_relay 为 None 表示不是 --rpc-relay,否则是(中转地址, Agent 令牌, 是否允许远程切到 bypassPermissions);
|
|
99
|
-
# prompt_flags 是 system prompt 四个参数的原始值,没给时各字段为 None
|
|
99
|
+
# prompt_flags 是 system prompt 四个参数的原始值,没给时各字段为 None;
|
|
100
|
+
# disallowed_tools 是 --disallowed-tools 的名字,按出现顺序去重,没给时为空。
|
|
100
101
|
ParsedArgs = tuple[
|
|
101
102
|
bool,
|
|
102
103
|
str | None,
|
|
@@ -106,6 +107,7 @@ ParsedArgs = tuple[
|
|
|
106
107
|
SystemPromptFlags,
|
|
107
108
|
tuple[str, str, bool] | None,
|
|
108
109
|
tuple[str, ...],
|
|
110
|
+
tuple[str, ...],
|
|
109
111
|
int | None,
|
|
110
112
|
bool,
|
|
111
113
|
]
|
|
@@ -339,6 +341,10 @@ def _usage_text(command_name: str = "comate") -> str:
|
|
|
339
341
|
" --add-dir <path> Grant tool read/write access to an extra directory\n"
|
|
340
342
|
" (repeatable). Applies to subagents too."
|
|
341
343
|
"\n"
|
|
344
|
+
" --disallowed-tools <names>\n"
|
|
345
|
+
" Remove tools from this session (comma-separated, repeatable).\n"
|
|
346
|
+
" Applies to subagents too. Exact names only, no wildcards;\n"
|
|
347
|
+
" MCP tools are written mcp__<server>__<tool>\n"
|
|
342
348
|
" --system-prompt <text>\n"
|
|
343
349
|
" Replace the opening of the system prompt (who the agent is and\n"
|
|
344
350
|
" how it works); guardrail sections always stay\n"
|
|
@@ -396,6 +402,35 @@ def _parse_rpc_relay(relay_url: str | None, token_arg: str | None) -> tuple[str,
|
|
|
396
402
|
return relay_url, token
|
|
397
403
|
|
|
398
404
|
|
|
405
|
+
# 不能用 --disallowed-tools 去掉的 tool:SDK 在会话创建时才因它们抛 ValueError
|
|
406
|
+
# (Agent 一定触发,Skill 只要还有模型可调用的 skill 就触发),RPC 模式下要到
|
|
407
|
+
# session.open 才暴露,所以在解析期就拦住。
|
|
408
|
+
_UNREMOVABLE_TOOLS = ("Agent", "Skill")
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
def _split_disallowed_tools(value: str) -> list[str]:
|
|
412
|
+
"""--disallowed-tools 的一个值 → 名字列表:逗号分隔,去首尾空白,丢空项。
|
|
413
|
+
|
|
414
|
+
只认精确名字:SDK 对通配符静默不生效,放过去用户会以为已经去掉了。
|
|
415
|
+
内置名是否存在留给 app._build_agent 检查(那时 SDK 已导入,解析期不多导入)。
|
|
416
|
+
"""
|
|
417
|
+
names = [name for name in (part.strip() for part in value.split(",")) if name]
|
|
418
|
+
if not names:
|
|
419
|
+
from comate_cli.terminal_agent.i18n import i18n, message
|
|
420
|
+
|
|
421
|
+
raise _ArgumentError(i18n(message.disallowed_tools_requires_value))
|
|
422
|
+
for name in names:
|
|
423
|
+
if "*" in name:
|
|
424
|
+
from comate_cli.terminal_agent.i18n import i18n, message
|
|
425
|
+
|
|
426
|
+
raise _ArgumentError(i18n(message.disallowed_tools_wildcard, name=name))
|
|
427
|
+
if name in _UNREMOVABLE_TOOLS:
|
|
428
|
+
from comate_cli.terminal_agent.i18n import i18n, message
|
|
429
|
+
|
|
430
|
+
raise _ArgumentError(i18n(message.disallowed_tools_unsupported, name=name))
|
|
431
|
+
return names
|
|
432
|
+
|
|
433
|
+
|
|
399
434
|
def _parse_args(argv: list[str]) -> ParsedArgs:
|
|
400
435
|
rpc_stdio = False
|
|
401
436
|
rpc_ws = False
|
|
@@ -411,6 +446,7 @@ def _parse_args(argv: list[str]) -> ParsedArgs:
|
|
|
411
446
|
output_format_explicit = False
|
|
412
447
|
positionals: list[str] = []
|
|
413
448
|
add_dirs: list[str] = []
|
|
449
|
+
disallowed_tools: list[str] = []
|
|
414
450
|
prompt_flags: dict[str, PromptFlag] = {}
|
|
415
451
|
yolo = False
|
|
416
452
|
|
|
@@ -493,6 +529,17 @@ def _parse_args(argv: list[str]) -> ParsedArgs:
|
|
|
493
529
|
add_dirs.append(value)
|
|
494
530
|
index += 1
|
|
495
531
|
continue
|
|
532
|
+
if arg == "--disallowed-tools" or arg.startswith("--disallowed-tools="):
|
|
533
|
+
if arg == "--disallowed-tools":
|
|
534
|
+
index += 1
|
|
535
|
+
value = argv[index] if index < len(argv) else ""
|
|
536
|
+
else:
|
|
537
|
+
value = arg.partition("=")[2]
|
|
538
|
+
for name in _split_disallowed_tools(value):
|
|
539
|
+
if name not in disallowed_tools:
|
|
540
|
+
disallowed_tools.append(name)
|
|
541
|
+
index += 1
|
|
542
|
+
continue
|
|
496
543
|
name, has_value, value = arg.partition("=")
|
|
497
544
|
if name in _SYSTEM_PROMPT_OPTIONS:
|
|
498
545
|
if not has_value:
|
|
@@ -567,12 +614,13 @@ def _parse_args(argv: list[str]) -> ParsedArgs:
|
|
|
567
614
|
|
|
568
615
|
raise _ArgumentError(i18n(message.rpc_mode_print_conflict, flag=rpc_flag))
|
|
569
616
|
print_prompt = " ".join(positionals) if positionals else ""
|
|
570
|
-
return rpc_stdio, None, False, print_prompt, output_format, system_prompt_flags, None, tuple(add_dirs), None, yolo
|
|
617
|
+
return rpc_stdio, None, False, print_prompt, output_format, system_prompt_flags, None, tuple(disallowed_tools), tuple(add_dirs), None, yolo
|
|
571
618
|
|
|
572
619
|
# Non -p mode: original logic
|
|
573
620
|
if not positionals:
|
|
574
621
|
return (
|
|
575
|
-
rpc_stdio, None, False, None, output_format, system_prompt_flags, rpc_relay, tuple(
|
|
622
|
+
rpc_stdio, None, False, None, output_format, system_prompt_flags, rpc_relay, tuple(disallowed_tools),
|
|
623
|
+
tuple(add_dirs), rpc_ws_port, yolo
|
|
576
624
|
)
|
|
577
625
|
|
|
578
626
|
command = positionals[0]
|
|
@@ -585,10 +633,10 @@ def _parse_args(argv: list[str]) -> ParsedArgs:
|
|
|
585
633
|
raise _ArgumentError(i18n(message.rpc_mode_resume_unsupported, flag=rpc_flag))
|
|
586
634
|
|
|
587
635
|
if len(positionals) == 1:
|
|
588
|
-
return rpc_stdio, None, True, None, output_format, system_prompt_flags, None, tuple(add_dirs), None, yolo
|
|
636
|
+
return rpc_stdio, None, True, None, output_format, system_prompt_flags, None, tuple(disallowed_tools), tuple(add_dirs), None, yolo
|
|
589
637
|
|
|
590
638
|
if len(positionals) == 2:
|
|
591
|
-
return rpc_stdio, positionals[1], False, None, output_format, system_prompt_flags, None, tuple(add_dirs), None, yolo
|
|
639
|
+
return rpc_stdio, positionals[1], False, None, output_format, system_prompt_flags, None, tuple(disallowed_tools), tuple(add_dirs), None, yolo
|
|
592
640
|
|
|
593
641
|
raise _ArgumentError("resume accepts at most one <session_id>")
|
|
594
642
|
|
|
@@ -776,6 +824,23 @@ def _build_wellformed_input():
|
|
|
776
824
|
return inp
|
|
777
825
|
|
|
778
826
|
|
|
827
|
+
def _use_utf8_stdout_when_redirected() -> None:
|
|
828
|
+
"""stdout 不是 TTY 时改用 UTF-8 输出(票 tui-plugin-mcp-override/05、07)。
|
|
829
|
+
|
|
830
|
+
Windows 上重定向的 stdout 取 locale 编码 cp936/GBK,`mcp list` 的 `✓`/`✗`、
|
|
831
|
+
`-p` 模式结果里的 emoji 编不出来会崩。调用方:`mcp` 子命令分支、`-p` 分支。
|
|
832
|
+
agent 的 Bash 工具按 UTF-8 解码子进程输出,所以改 UTF-8 而不只是 errors="replace"。
|
|
833
|
+
TTY 不动:Windows 控制台本来就走 Unicode 控制台 API(PEP 528)。
|
|
834
|
+
"""
|
|
835
|
+
stdout = sys.stdout
|
|
836
|
+
if stdout is None or not hasattr(stdout, "reconfigure"):
|
|
837
|
+
return
|
|
838
|
+
isatty = getattr(stdout, "isatty", None)
|
|
839
|
+
if callable(isatty) and isatty():
|
|
840
|
+
return
|
|
841
|
+
stdout.reconfigure(encoding="utf-8", errors="replace")
|
|
842
|
+
|
|
843
|
+
|
|
779
844
|
def main(argv: list[str] | None = None, *, profile=None) -> None:
|
|
780
845
|
from comate_cli.distribution import DEFAULT_PROFILE
|
|
781
846
|
from comate_cli.terminal_title import (
|
|
@@ -834,6 +899,7 @@ def main(argv: list[str] | None = None, *, profile=None) -> None:
|
|
|
834
899
|
if run_argv and run_argv[0] == "mcp":
|
|
835
900
|
from comate_cli.mcp_cli import McpCliError, run_mcp_command
|
|
836
901
|
|
|
902
|
+
_use_utf8_stdout_when_redirected()
|
|
837
903
|
try:
|
|
838
904
|
run_mcp_command(run_argv[1:], command_name=command_name)
|
|
839
905
|
return
|
|
@@ -866,6 +932,7 @@ def main(argv: list[str] | None = None, *, profile=None) -> None:
|
|
|
866
932
|
print_output_format,
|
|
867
933
|
system_prompt_flags,
|
|
868
934
|
rpc_relay,
|
|
935
|
+
disallowed_tools,
|
|
869
936
|
add_dirs_raw,
|
|
870
937
|
rpc_ws_port,
|
|
871
938
|
yolo,
|
|
@@ -881,6 +948,8 @@ def main(argv: list[str] | None = None, *, profile=None) -> None:
|
|
|
881
948
|
# Assemble print mode message
|
|
882
949
|
print_message: str | None = None
|
|
883
950
|
if print_prompt is not None:
|
|
951
|
+
# 票 tui-plugin-mcp-override/07:结果在最后一步才写 stdout,GBK 编不出 emoji 会丢掉整个结果。
|
|
952
|
+
_use_utf8_stdout_when_redirected()
|
|
884
953
|
stdin_text = _read_stdin_if_ready(sys.stdin)
|
|
885
954
|
parts = [p for p in (stdin_text.strip(), print_prompt.strip()) if p]
|
|
886
955
|
if not parts:
|
|
@@ -920,6 +989,7 @@ def main(argv: list[str] | None = None, *, profile=None) -> None:
|
|
|
920
989
|
print_message=print_message,
|
|
921
990
|
print_output_format=print_output_format,
|
|
922
991
|
add_dirs=add_dirs,
|
|
992
|
+
disallowed_tools=disallowed_tools,
|
|
923
993
|
yolo=yolo,
|
|
924
994
|
system_prompt_flags=system_prompt_flags,
|
|
925
995
|
process_start_perf=_PROCESS_START_PERF,
|