comate-cli 0.12.4b7__tar.gz → 0.12.4b9__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.4b7 → comate_cli-0.12.4b9}/CHANGELOG.md +15 -2
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/CONTEXT.md +39 -3
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/PKG-INFO +2 -2
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/animations.py +0 -8
- comate_cli-0.12.4b7/comate_cli/terminal_agent/builtin_commands/pr.md → comate_cli-0.12.4b9/comate_cli/terminal_agent/builtin_commands/open-pr.md +1 -1
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config/model.py +5 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config/picker.py +6 -1
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config/picker_state.py +4 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config/store.py +15 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/custom_slash_commands.py +1 -1
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/effort_style.py +23 -1
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/event_renderer.py +44 -10
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/i18n/_en.py +26 -6
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/i18n/_ja.py +26 -6
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/i18n/_zh.py +25 -6
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/i18n/message.py +14 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/side_install.py +6 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/skills_menu.py +26 -10
- comate_cli-0.12.4b9/comate_cli/terminal_agent/suggestion/__init__.py +5 -0
- comate_cli-0.12.4b9/comate_cli/terminal_agent/suggestion/controller.py +118 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tips.py +8 -3
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_approval_view.py +2 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_fold.py +3 -2
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui.py +184 -44
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/btw_view.py +2 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/commands.py +203 -24
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/key_bindings.py +21 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/render_panels.py +17 -6
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/shell_mode.py +10 -6
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/update_check.py +34 -3
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/workflows_panel.py +30 -14
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/workflows_panel_model.py +26 -2
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/pyproject.toml +2 -2
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_model.py +15 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_picker_state.py +16 -2
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_picker_ui.py +21 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_roundtrip.py +7 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_store_load.py +38 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_store_save.py +15 -0
- comate_cli-0.12.4b9/tests/suggestion/test_next_step_suggestion_controller.py +304 -0
- comate_cli-0.12.4b9/tests/suggestion/test_next_step_suggestion_render.py +147 -0
- comate_cli-0.12.4b9/tests/suggestion/test_tab_accepts_next_step_suggestion.py +160 -0
- comate_cli-0.12.4b9/tests/suggestion/test_tui_next_step_suggestion_integration.py +259 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ctrl_b_background.py +10 -5
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_custom_slash_commands.py +26 -5
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_effort_style.py +51 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_approval_wait.py +2 -1
- comate_cli-0.12.4b9/tests/test_event_renderer_idle_prune.py +51 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_streaming.py +58 -5
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_i18n.py +14 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_mcp_slash_command.py +488 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_modal_panel_visibility.py +7 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_preflight.py +26 -1
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_preflight_wizard_ui.py +3 -3
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_running_tool_status_line.py +35 -13
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_shell_mode.py +11 -6
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_side_install.py +56 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_skills_slash_command.py +64 -6
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_task_panel_rendering.py +10 -4
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tips.py +15 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_todo_panel_busy_gating.py +66 -2
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_approval_view_workflow.py +11 -2
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_fold_panel.py +33 -31
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_builtin_slash_chain.py +121 -3
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_thinking_display.py +37 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_update_check.py +208 -35
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_workflows_panel.py +76 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_workflows_panel_model.py +68 -1
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/uv.lock +2 -2
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/bash/3b0c312b1a234220818cb8cc15a12ea1565c69dc5f828351a492dab1add0cf84.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/bash/b0696d5d44fdde7597b8e9bd706d61237290ebca0c1c99273799393a7af99316.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/bash/e1164ab5f5f1e125db38bb44420532265c958f19533fbda8700db5a8aa4c3d68.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/00f8013ce28fed8e3076db6490d6a3de8dbc1f57f5248a1f5e2710f11ab6849c.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/0a5f3319bc1813a523b8d041831399f3ea694fcdb96f4b1df740300d08c60521.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/17dc19a9b5faddcd056013e7783c8d23525d060b7b20a73ee241c569bedea6d8.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/2b488f719c3431607773d9cebef4924ebfa33745adc68d8ee0f89596c608a218.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/32ce175150a77180dda04a76ea66b9ee5b0c46ea0fd0842172bacece964d57a4.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/43166c9eb998d1a426ce0c014348e39adc8c8e1d3d7a94ced4cc33ab268ecdeb.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/4afc47414280761b7c94ff91f7477c4eb5602396da89303b403c6f3ef9535fd0.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/56fca6c3112743a94cd0df58e04ee6dda31546ed53d50f8bf907dccb6f5329d3.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/605fcb1ca26d1cb632e364dd044d280a12ad4f188db698d5bad57fe1ff556ce3.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/6763a04477b314da76472e76696c8b03ee89fffc23ce74a22c634ea373840acd.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/6d1856ff719ee695ed9205cf68723a263f8c70fe090295037c1c9a837f8eac13.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/6e08c59431a214d8c3650a701cbaaf9125503d59d28476642f8b5a0ad6c8ed93.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/746f6a3b34e30583972816a0052d99e8297096ba522d66027b085e3a0069b7db.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/7c8fa2270ca7721e8619ba7eaec744100877330317dd5e8a1e42494a09579317.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/7cc3e32a61277dc3e35039fdc1cac3691e147cd50d8d16fa75447de7d11abb77.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/8203d4eaf35b0bb224cb12067e638b7f873ae0af05a590adedc02ae159a08099.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/82a7ce335091c00f8aee0ff54b6a75ed25fb6f7a2f4bf8d29921c3f2704ada81.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/82e9a29128ad224555ae0e85dddcc118d92a8f4faf4c8a3c3702c6b43dc71511.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/83be41699a979e16de16f3095981346f337fda56a3c254420df953e2de87d982.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/84074b6fda0e110d23094926c0d1846130be2b3870b1bcd5516243bae808b209.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/a92368734a2d79c15eaba1c7d282bab2d4150ccde0e41e30628cfb6b7be6a678.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/b02349374e026c124a60335b4b0e77698e4b7f8391f2466c827f6f80a8d596b2.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/b41279d93d2b1f03e99bf2fdcd4477781edf3546256489e2d37f082fa414ef94.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/bde0cfc02d38109cc02a28dd07611e464db9b47fef8b16fc25591866e5003316.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/c0e234da2bfe338ffbce547372af90d36ce7580361b69664823d12fac048a86e.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/c979b9589e166ae451c819fc8fc1efdf9eb042ce7af99e420a5b540f0d041a7a.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/dd39676b55965a3e04c1b28c82cd9c15e335776f39f325f61854d3e48aa87859.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/dec1ee9f38d117f649d0ba2cfb54b50d9ccd841833170c49614fa181a358013e.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/eac0d88d65c24b10af556c030b795f3312cc70fc80f8f64575205ea1a6476264.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/ef063804b585209aafbded7c27ad8d5eacbad17b3bb967022290a9efd01f6d13.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/f75a98ad1ac3c085060f90492292060b3720dfa98c776e61a643b9824d1dc237.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/faffcd8b4abd87e4abff3b72dcde673e844a4d7e230fbcc5c116ddd11815c37b.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/fb29e07995891317ca0daa3257e541238908889bc7a68efeba695c8ac3a2db86.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/feed470ec463825f43ae4e1b92a5996b1dbad91605fe491f39c9ee60879b7155.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/index.json +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/ls/5a0a29a96857998fdfe5696c09b9c60027a6529e21108e22a20f5227afeddb59.json +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/1f093e98c0f4026921bb2df0c7c04d6b55b51ec40c9fbf38ba57bd387399127d.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/57c31009cc3665a6a672811ecf048cfb75ff7bae92598df943f492c53d39ca8e.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/916a2e47f13fd22d3a73a4896c7a5edb3381b8a2c8322ce3ab8a4bf9da94c4a0.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/91f5872f5b4b1b43f16589f7dd25e47236a805e848b37307cef464e881307fe1.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/9871dc91ff9afef1303c74cf669996828a7db3dbff6c4c41fbac0a53fd7d195b.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/af594562a5579ffc9bef105dc77ed26408b2408447005046c9c6505541e2776a.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/c52ec3da48b3a731ed42cc357258a4627d2d11fab5ef14d3050fd50e748151d4.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/f8c08a56feb0812b35a8e4b29a721d38c0aacd83ce3620c432d8b52114c14816.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/fa30187a59d255f168806ee0de7a0a32b00535e53e7c5420aad1bac44b54a667.txt +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/scheduled_prompts.json +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.gitignore +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/README.md +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/__main__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/device_identity.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/distribution.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/main.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/mcp_cli.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/app.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/approval_bridge.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/approval_content_preview.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/assistant_render.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/announcements.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/client.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/feedback.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/provider_snapshot.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/rating.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/runtime.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/session_report.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/session_title.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/tasks.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/bash_command_display.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/builtin_commands/.keep +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/builtin_commands/commit.md +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/builtin_commands/implement-plan.md +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/builtin_commands/learn.md +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/clipboard_image.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/codenames.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config_check.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/console_profile.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/context_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/effort_menu.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/effort_ruler.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/env_utils.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/error_display.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/exit_confirm_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/exit_watchdog.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/figures.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/file_ref_hint.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/fragment_utils.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/goal_edit_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/goal_resume_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/history_printer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/i18n/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/image_chips.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/input_geometry.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/jobs_picker.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/jobs_state.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/layout_coordinator.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/locale.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/logging_adapter.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/logging_file_handler.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/logo.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/markdown_render.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/mcp_serve.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/mention_completer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/message_style.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/model_tier_style.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/models.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/output_style_menu.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/auto_update_runner.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/auto_update_store.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/components/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/components/detail_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/components/plugin_list.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/components/search_box.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/components/tab_bar.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/marketplace_install_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/operation_state.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/plugin_picker.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/tabs/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/tabs/discover_tab.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/tabs/errors_tab.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/tabs/installed_tab.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/preflight.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/preflight_wizard.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/preflight_wizard_ui.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/print_mode.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/question_broker.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/question_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/recap/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/recap/controller.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/resume_picker.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/resume_preview.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/resume_selector.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/rpc_commands.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/rpc_relay.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/rpc_stdio.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/rpc_ws.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/scm_request_status.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/selection_menu.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/sigint_guard.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/skill_slash_input.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/slash_commands.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/startup.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/startup_profile.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/status_bar.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/statusline/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/statusline/model.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/statusline/picker.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/statusline/picker_state.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/statusline/store.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/stream_pacer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/synchronized_output.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/text_effects.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/theme.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_fold_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_result_formatters.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_result_state.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_result_store.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_result_viewer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/transcript_viewer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/approval_queue.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/history_sync.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/input_behavior.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/mcp_connecting_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/resize_guard.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/run_clock.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/slash_command_registry.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/ui_mode.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/ultracode_keyword.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/update_messages.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_title.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/update_cli.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/docs/cli-rpc-stdio-guide.md +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/docs/release-notes/0.12.3.md +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/docs/startup-performance.md +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/docs/superpowers/plans/2026-07-07-tui-first-repaint-before-sdk-submit.md +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/docs/superpowers/plans/2026-07-07-windows-update-manual-rollback.md +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/_fake_anthropic_server.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/_rpc_ws_client.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_skills_denylist_migration.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/conftest.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/fixtures/exit_watchdog_child.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/fixtures/fake_mcp_misbehaving_stdout.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/recap/test_idle_recap_controller.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/recap/test_recap_history_rendering.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/recap/test_tui_idle_recap_integration.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/statusline/__init__.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/statusline/test_model.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/statusline/test_picker_state.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/statusline/test_store.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_animations_styles.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_animator_shuffle.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_config_check_gate.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_exit_lifecycle.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_mcp_preload.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_mcp_preload_kick.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_preflight_gate.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_print_mode.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_profile_threading.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_pty_ctrl_b.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_pty_ctrl_c_exit.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_pty_shell_mode.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_pty_smoke.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_shutdown.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_startup_latency.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_startup_order.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_token_cost_config.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_usage_line.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_approval_bridge.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_approval_content_preview.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_announcements.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_client.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_feedback.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_provider_snapshot.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_rating.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_session_report.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_tasks.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_btw_slash_command.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_busy_slash_gating.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_cli_project_root.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_clipboard_image_reader.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_commands_system_messages.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_compact_command_semantics.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_completion_context_activation.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_completion_status_panel.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_config_check.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_console_profile.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_context_command.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_context_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ctrl_c_clear_input.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_device_identity.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_discover_tab.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_distribution_contract.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_drain_frame_atomicity.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_effort_menu.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_effort_menu_frame_rate.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_effort_ruler.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_effort_slash_command.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_errors_tab.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_boundary.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_e2e.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_fixed_overhead.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_jobs.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_log_boundary.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_log_queue.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_provider_overflow.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_shell.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_stream_pacing.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_stream_staging.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_tool_args_progress.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_tool_fold.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_exit_confirm_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_exit_guard.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_exit_watchdog.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_exit_watchdog_subprocess.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_file_ref_hint.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_format_error.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_edit_handlers.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_edit_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_paused_hint.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_resume_tui.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_resume_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_slash_command.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_handle_error.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_drain_throttle.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_printer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_printer_log.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_printer_styles.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_printer_subtitle_position.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_printer_tool_fold.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_sync.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_sync_tool_fold.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_image_chips.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_image_preprocess_offload_lag.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_import_weight.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_input_behavior.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_input_history.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_input_separator_counter.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_installed_tab.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_interrupt_exit_semantics.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_jobs_panel.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_jobs_picker.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_key_bindings_system_messages.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_layout_coordinator.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_loading_modal_suppression.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_loading_tip_picker.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_logging_adapter.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_logging_file_handler.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_logo.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_main_args.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_main_args_yolo.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_main_profile_entry.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_markdown_render.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_marketplaces_tab.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_mcp_cli.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_mcp_cli_scope_defaults.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_mcp_serve.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_mention_completer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_menu_cursor_unification.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_message_style.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_modal_freeze_timing.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_model_switch_command.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_model_tier_style.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_no_raw_colors.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_output_style_slash_command.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_permission_mode_cycle.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_auto_update_runner.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_auto_update_store.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_auto_update_tui.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_operation_state.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_slash_commands.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_tui_components.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_preflight_copilot.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_pty_output_integrity.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_question_broker.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_question_key_bindings.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_question_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_resize_guard.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_resume_picker.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_resume_picker_exit_safety.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_resume_preview.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_resume_selector.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rewind_command_semantics.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_mode_logging.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_relay_dial_out.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_relay_e2e_smoke.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_relay_process_smoke.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_v4_stdio_smoke.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_v4_ws_smoke.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_ws_bind_failure.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_run_clock.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_scm_request_status.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_scrollback_write_encoding.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_selection_menu.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_session_auto_title.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_session_query_token_summary.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_settings_write_guard.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_shutdown_noise_guard.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_shutdown_noise_integration.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_sigint_guard.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_sigint_key_binding.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_skill_slash_input.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_slash_add_dir.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_slash_argument_hint.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_slash_clear.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_slash_completer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_slash_registry.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_startup_import_budget.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_startup_profile.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_status_bar.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_status_bar_mid_turn_refresh.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_status_bar_request_status.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_status_bar_transient.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_stream_pacer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_stream_pacing_tick.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_stream_staging_panel.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_style_class_coverage.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_synchronized_output.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tab_title.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_task_panel_format.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_task_panel_key_bindings.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_task_poll.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_terminal_title.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_theme.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_approval_key_bindings.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_approval_tui.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_approval_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_fold.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_fold_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_result_formatters.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_result_state.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_result_store.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_result_viewer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_result_viewer_key_bindings.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_view.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_view_styles.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_transcript_viewer.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_transcript_viewer_tool_fold.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_deferred_prewarm.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_elapsed_status.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_esc_queue.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_exit_idempotence.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_exit_paced_tail.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_exit_pending_logs.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_hot_reload.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_image_chip_seed.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_image_paste.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_image_path_upgrade.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_image_restore.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_image_submit.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_interrupt_queue_recall.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_llm_retry_panel.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_loading_tip_rotation.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_local_interactive_barrier.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_mcp_init_gate.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_paste_history_persistence.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_paste_newline_guard.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_paste_placeholder.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_plugin_load.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_provider_error_shield.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_queue_pop_images.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_queue_preview.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_queue_sdk_source.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_replace_session_resume_hint.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_scheduled_fire_log.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_scratchpad_fold_wiring.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_send_undo_window.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_session_observers.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_shutdown_cancel_propagation.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_split_invariance.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_startup_latency.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_surrogate_repair.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_tool_result_registry_lifecycle.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_window_too_small_fallback.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ui_mode_derivation.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ui_tick_exception_isolation.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ultracode_keyword.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ultracode_keyword_frame_rate.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ultracode_keyword_submit.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ultracode_shimmer_render.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_update_cli.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_upstream_surrogate_merge_characterization.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_usage_command.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_wellformed_terminal_input.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_whitelabel_clear_logo.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_windows_sigint_console.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_wrap_user_text.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_zipapp_launcher_path.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/diagnose_windows_shim_rename.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/logo_lab.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/nico_preview.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/probe_conhost_char_width.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/probe_conhost_render_replay.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/startup_bench.py +0 -0
- {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/verify_windows_self_update_semantics.py +0 -0
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
### Added
|
|
6
6
|
|
|
7
|
+
- 规则双目录(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/` 不读。目录、去重、逗号、符号链接四项改动作用在统一扫描入口上,常驻规则同样受益。
|
|
8
|
+
- 技能扫描根加入 `.agents`(SDK;含 CLI `/skills` 菜单来源判定修正):`npx skills add` 装进 `.agents/skills/` 的技能直接被发现、可通过 Skill 工具调用,`.claude/skills/` 下指向它的符号链接不会让它列两次;运行中再装一个,下一轮用户输入后热发现也能看到。扫描根顺序即优先级,同名先到先得:项目 `.agent/skills` → `.agents/skills` → `.claude/skills`;用户 `~/.agent/skills` → `~/.agents/skills` → `~/.config/agents/skills` → `~/.claude/skills`,两层各受对应 setting source 门控。四类扫描根下以 `.` 开头的子目录一律跳过(不当作 skill 也不当作 namespace)。`/skills` 菜单的同名去重与来源判定改按真实路径(扫描根与 skill 目录两边 resolve 后再比),符号链接 skill 归入正确分组、不再兜底成 user,project 组副标题自动列出 `.agents/skills`。
|
|
9
|
+
- MCP 工具停用(SDK 部分,菜单在后续版本):`.mcp.json` 的 server 条目新增可选字段 `disabled_tools`(字符串数组,写 server 自报的原始工具名,精确匹配、不支持通配符),列出的工具不再发给模型、子 agent 点名也拿不到;没列出的工具与 server 新增的工具照常加载,名单里写了 server 不提供的名字不报错。代码里传的 `mcp_servers`(含 `type: "sdk"`)认同一个字段。新增存盘函数 `comate_agent_sdk.mcp.set_mcp_server_disabled_tools(alias, names, *, scope, project_root)`:只改该条目的这一个字段,空名单即删除字段,对 `{"enabled": false}` 墓碑条目报错。新增 `AgentRuntime.set_mcp_disabled_tools(alias, names)`:会话中途改名单,不重连任何 server,下一次模型请求生效(实测 3 台 × 50 个工具单次约 2.4ms)。一台 server 的工具全部停用时它保持连接,但它的 instructions 不再发给模型。旧版本 SDK 会忽略这个字段并加载全部工具。
|
|
10
|
+
- `/mcp` 工具列表可按工具启用 / 停用:每行前显示 `[x]`(启用)/ `[ ]`(停用),停用的工具仍留在列表里;Space 切换当前行并立刻写回该 server 所在层的 `.mcp.json`(`disabled_tools` 字段),不重连任何 server,下一次模型请求生效,agent 忙碌时也可切换;Enter 仍进工具详情,详情页多一行启用 / 停用状态。存盘失败时勾选不变,菜单里显示一行错误。server 详情页有停用时显示 `Tools: 5 / 40 tools`,整台 Enable 后的「tools loaded」只数启用的工具;一台 server 的工具全部停用后 `View tools` 入口仍在,可以进去重新启用。新文案三语齐全。comate-cli 的 `comate-agent-sdk` 下限抬到 0.12.15(SDK 同步升版)。
|
|
11
|
+
- 空闲修剪提示与开关:SDK 使用方升级后默认启用空闲修剪(会话空闲超 3 小时后,新一轮发出前把较早的 Read / Bash 等可重取工具结果换成占位符,少付缓存已凉后的全价重读),可用 `AgentConfig(idle_pruning=False)` 关闭;CLI 用户可在 settings.json 顶层写 `"idle_pruning": false` 关闭(不写 = 开,三层合并)。修剪真的发生时终端显示一行「已清理 N 条较早的工具结果,约省 X tokens(空闲 H 小时)」,模型随后重读文件不再是莫名其妙的动作;resume 后已清理条目保持占位符,不重复修剪、不重复提示。
|
|
7
12
|
- `--system-prompt <文本>` / `--system-prompt-file <路径>`:用自己的文字替换 system prompt 的开头段(agent 是谁、怎么干活);`--append-system-prompt <文本>` / `--append-system-prompt-file <路径>`:在护栏之后追加。参数名对齐 Claude Code,但与 Claude Code 不同的是护栏段(运行环境说明、工作纪律、危险操作确认、汇报规范等)始终保留。替换与追加可同时使用;同类的文本版与文件版同时给、值为空、文件读不了或为空都会当场退出并按界面语言提示。`--rpc-*` 与 `-p` 同样生效,一个进程下所有新会话共用;resume 旧会话时沿用会话创建时的 system prompt,界面会给出提示,`/clear` 后生效。白牌 `system_role` 语义不变:只换品牌身份句,编码规则保留。
|
|
8
13
|
- ctrl+b 把正在前台跑的 shell 命令转到后台:对模型调用的 Bash 工具和 `!` 本地命令都生效。同一个进程原样移交给后台 job(不重启不杀),模型 Bash 的工具结果立刻回「用户已转后台 + job_id + 输出尾部」让模型继续本轮;`!` 命令静默记一条 reminder、解锁输入框。后台跑完走既有 job 完成通知叫模型;想停用 `/ps`。运行面板与 `!` 活动区在 Bash 跑时显示「ctrl+b 转后台」提示,`/help` 多一行说明。没有可转后台的命令时按键只闪一条提示;子 agent 里的 Bash 不受影响。tmux 用户需按两次 ctrl+b。
|
|
9
14
|
- `!` shell 模式:空输入框敲 `!` 进入 shell 模式,回车后命令在本地直接执行(跳过权限审批、与模型共享持久 cwd),滚动区显示 `! cmd` + 紧贴其下的 `⎿` 输出块(stderr 红、stdout 不红、空输出标 `(No output)`、控制码剥净、长输出截断可 Ctrl+O 看全文)。命令结束后模型自动简短回应一轮;运行期间敲的提问并入同一轮。运行中锚点下方实时显示最后 5 行输出与耗时;超过 60 秒自动转后台并解锁输入框,后台跑完再叫模型;Esc/Ctrl+C 中断不叫模型并把命令回填到输入框。忙时 `!cmd` 排队,回合结束后按顺序执行。
|
|
@@ -20,9 +25,9 @@
|
|
|
20
25
|
`--show-token`、`--hostname`、`--watch`、`--jq`(jq 内建能读环境变量)、`api` / `search` / `secret`
|
|
21
26
|
与一切写形态仍然询问。
|
|
22
27
|
- 代码托管平台整合第三刀(slash 命令):随包新增 `/commit [focus or message hint]` 与
|
|
23
|
-
`/pr [title hint]`(别名 `/mr`)。两者是 default scope 的 markdown 命令,模板先预执行
|
|
28
|
+
`/open-pr [title hint]`(别名 `/open-mr`)。两者是 default scope 的 markdown 命令,模板先预执行
|
|
24
29
|
`git status` / `git diff --stat` / `git log` 把上下文塞进提示词,模型再按 Bash 工具的 git 纪律
|
|
25
|
-
与 PR/MR 流程执行;`/pr` 会先提交未提交的改动、`git push -u`,再按 `<git_env>` 的 `Remote:`
|
|
30
|
+
与 PR/MR 流程执行;`/open-pr` 会先提交未提交的改动、`git push -u`,再按 `<git_env>` 的 `Remote:`
|
|
26
31
|
选 `gh` 或 `glab` 开(或更新)请求并回 URL。创建请求那一步走正常权限确认,不临时放行。
|
|
27
32
|
自定义命令 frontmatter 新增 `aliases:`,按 project > user > default 分配;project/user 命令的别名
|
|
28
33
|
撞上已占用名字时提示一次,随包命令的别名被高优先级命令盖掉时静默(覆盖语义)。
|
|
@@ -56,9 +61,17 @@
|
|
|
56
61
|
支持的终端(VS Code 2025-12 起、Windows Terminal、iTerm2、kitty、WezTerm、Alacritty、
|
|
57
62
|
Ghostty)整帧上屏,底部带 6fps 重画与暂存窗逐行变化不再闪烁;不支持的终端忽略该
|
|
58
63
|
私有模式。只在 POSIX 真 tty 上启用,`COMATE_CLI_NO_SYNC_OUTPUT=1` 可关闭。
|
|
64
|
+
- 首启向导新增 GMI Cloud 预设(SDK `PROVIDER_PRESETS`,id `gmi_cloud`):OpenAI 协议,
|
|
65
|
+
端点 `https://api.gmi-serving.com/v1`,LOW 用 `Qwen/Qwen3.8-27B`,MID / HIGH 用
|
|
66
|
+
`Qwen/Qwen3.8-Max`。该端点还没有方言映射,effort / thinking 参数暂按默认 openai 行为发送,
|
|
67
|
+
见 `docs/issues/2026-10-09-gmi-cloud-dialect/`。
|
|
59
68
|
|
|
60
69
|
### Changed
|
|
61
70
|
|
|
71
|
+
- 0.12.4 测试版里的随包 `/pr`(别名 `/mr`)改名为 `/open-pr`(别名 `/open-mr`),功能不变。原因:`pr` 是常见的第三方 skill 名,旧名会挡住用户自己装的同名 skill。`/pr`、`/mr` 不再有效,也没有改名提示。
|
|
72
|
+
- 用户装的 skill 现在可以覆盖同名的随包命令(`/commit`、`/learn`、`/implement-plan`、`/open-pr` 等):`/<名字>` 调用 skill,不提示,和 project/user 自定义命令覆盖随包命令一样。skill 只占了随包命令的某个别名时,随包命令只失去这个别名。skill 被禁用或随插件卸载后,随包命令自动回来。`user-invocable: false` 的 skill 不占名字。核心命令(`/help`、`/model` 等)与用户自己写的同名自定义命令仍然优先于 skill;这种冲突改为每个名字每个进程只提示一次(以前每次启动、切换会话、加载插件都会输出一条英文 WARNING),提示按界面语言显示,并说明模型仍可以通过 Skill 工具调用这个 skill。见 ADR-0038。
|
|
73
|
+
- 思考被折叠时,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 后下一次请求即生效。颜色、位置、出现时机不变;短语在中文 / 日文界面下也保持英文。
|
|
74
|
+
- 常驻规则进置顶区(SDK):规则目录(`~/.agent/rules`、`~/.claude/rules`、项目 `.agent/rules`、`.claude/rules`)里没有有效 `paths:` 的文件——没有 frontmatter、frontmatter YAML 写坏、`paths` 只写了 `**` 之类全匹配——不再被丢弃,而是像 Claude Code 一样启动就加载,和 AGENTS.md 一起常驻。顺序:用户 AGENTS.md → 用户层常驻规则 → 项目 AGENTS.md 链 → 项目层常驻规则(同层 `.agent` 先、`.claude` 后)。进模型的是剥掉 frontmatter 和 HTML 注释后的正文;置顶区文件清单带上每条规则的路径与 token 数;compact、`/clear`、resume 后仍在。user 层受 user setting source 门控,项目层受 project 门控;计入置顶区既有的 token 告警阈值,不截断。**行为变更**:`.agent/rules` 下以前被静默丢弃的无 `paths` 文件从本版起生效。
|
|
62
75
|
- 首启向导(Provider setup)整体重做,照 `/effort` 刻度尺模式改为自绘组件 `preflight_wizard_ui.WizardScreenUI`,不再借用共用的 `SelectionMenuUI`:六屏统一「标题 / 空行 / 内容 / 空行 / 键位提示」顶部对齐骨架;选项行改为 `❯ label` 无圆点、项间不留空行;provider 屏只在选中项下方显示一行 preset 说明;API key / endpoint / 模型名输入屏去掉边框;确认屏的 JSON 预览改为对齐缩进的静态块;键位提示只写真正绑定的键(去掉并不存在的 k/j)。其它菜单不受影响。
|
|
63
76
|
- `/effort` 的 `ultracode` 改绑 `max` 档(原 `xhigh`):选 ultracode = 最高思考档 + workflows
|
|
64
77
|
多 agent 编排;`/effort max` 或 `auto` 关开关,`xhigh` 变回普通档。刻度尺描述改为
|
|
@@ -9,20 +9,24 @@ A slash command backed by a hardcoded Python handler registered in `SLASH_COMMAN
|
|
|
9
9
|
_Avoid_: builtin command (ambiguous), native command
|
|
10
10
|
|
|
11
11
|
**Default Custom Command**:
|
|
12
|
-
A markdown-resource slash command shipped inside the `comate_cli` package under `terminal_agent/builtin_commands/`. Loaded via the custom-command pipeline (frontmatter + template), with `source_scope = "default"` on the *source* axis. User-authored custom commands of the same name override it. A command may declare `aliases:` in its frontmatter (e.g. `/pr` → `/mr`). Aliases are assigned in scope priority order (`project > user > default`); an alias that is already taken (Core Slash Command name, another command's name, or a higher-priority alias) is dropped — silently for Default Custom Commands (override semantics), with a one-time warning for project/user commands, and as a startup error when a Default Custom Command alias would shadow a Core Slash Command.
|
|
12
|
+
A markdown-resource slash command shipped inside the `comate_cli` package under `terminal_agent/builtin_commands/`. Loaded via the custom-command pipeline (frontmatter + template), with `source_scope = "default"` on the *source* axis. User-authored custom commands and Skill Slash Commands of the same name override it. A command may declare `aliases:` in its frontmatter (e.g. `/open-pr` → `/open-mr`). Aliases are assigned in scope priority order (`project > user > default`); an alias that is already taken (Core Slash Command name, another command's name, or a higher-priority alias) is dropped — silently for Default Custom Commands (override semantics), with a one-time warning for project/user commands, and as a startup error when a Default Custom Command alias would shadow a Core Slash Command.
|
|
13
13
|
_Avoid_: builtin command (ambiguous), bundled command
|
|
14
14
|
|
|
15
15
|
**Execution Axis** (`SlashCommandSource`):
|
|
16
16
|
Describes how a registered command is dispatched. Values: `"builtin"` (hardcoded handler), `"custom"` (markdown template render), `"skill"` (skill slash). Orthogonal to the Source Axis.
|
|
17
17
|
|
|
18
|
+
**Skill Slash Command**:
|
|
19
|
+
The slash entry of a runtime skill that is enabled and user-invocable. Its name is the skill's call name; plugin skills carry a `namespace:` prefix and so never collide with plain names. A skill that is disabled or declares `user-invocable: false` has no slash entry and claims no name. When its name is shadowed by a higher-priority command, the skill stays callable by the model through the Skill tool; only the slash entry is lost, and the user is told once per name per process.
|
|
20
|
+
_Avoid_: skill command (ambiguous with custom command)
|
|
21
|
+
|
|
18
22
|
**Source Axis** (`CustomSlashCommand.source_scope`):
|
|
19
23
|
Describes where a markdown-template command's definition lives. Values: `"project"`, `"user"`, `"plugin"`, `"default"`. Determines override priority only.
|
|
20
24
|
|
|
21
25
|
**Reserved Name Set** (`builtin_names`):
|
|
22
|
-
The set of names derived from `SLASH_COMMAND_SPECS` (Core Slash Commands) that user-authored custom commands may not shadow. A custom command whose name collides with this set is silently skipped with a warning during discovery. **Default Custom Command names do NOT belong to this set** — they are overrideable by design.
|
|
26
|
+
The set of names derived from `SLASH_COMMAND_SPECS` (Core Slash Commands) that user-authored custom commands and Skill Slash Commands may not shadow. A custom command whose name collides with this set is silently skipped with a warning during discovery. **Default Custom Command names do NOT belong to this set** — they are overrideable by design.
|
|
23
27
|
|
|
24
28
|
**Override Priority Chain**:
|
|
25
|
-
|
|
29
|
+
Core Slash Command > project custom > user custom > Skill Slash Command > Default Custom Command (plus namespaced `plugin` commands registered independently at runtime). Core Slash Commands are the Reserved Name Set and are never shadowed. A user-authored custom command beats a Skill Slash Command of the same name, and the user is told once. A Default Custom Command yields silently to any higher-priority entry, including a skill that takes only one of its aliases; it keeps its other names and comes back as soon as the shadowing skill is disabled or removed. Only the winning entry reaches the registry. Skills outrank Default Custom Commands on purpose (ADR-0038).
|
|
26
30
|
|
|
27
31
|
## Streaming Display Language
|
|
28
32
|
|
|
@@ -38,6 +42,10 @@ _Avoid_: Markdown parsing, lexer detection
|
|
|
38
42
|
The display-only cadence at which complete assistant text lines leave the line-split pipeline and enter the stream staging window: one line per fixed interval, blank lines free, and a backlog that speeds the cadence up smoothly (one extra multiple per 20 pending lines, capped at 4x) but never dumps everything at once. It never delays thinking lines, tool entries, or scrollback commits of already staged content, and it holds nothing that ContextIR or the transcript depend on.
|
|
39
43
|
_Avoid_: typewriter effect (that is character-level), throttling (that is the scrollback drain), rate limiting
|
|
40
44
|
|
|
45
|
+
**Thinking Badge**:
|
|
46
|
+
The short English phrase in the breathing-yellow part of the loading line's status suffix, shown only while the model thinks and thinking display is off. It names the thinking effort that the in-flight request actually uses (the applied level, or ultracode when that switch is on). It is chosen when a request starts to think and does not change until that request ends. When no applied level is known, it shows the neutral word `thinking`. It is a word, not a color: it never takes the effort level colors.
|
|
47
|
+
_Avoid_: effort badge, hidden thinking label, random thinking word
|
|
48
|
+
|
|
41
49
|
**Immutable Scrollback Commit**:
|
|
42
50
|
The point at which staged terminal output is appended to terminal scrollback and can no longer be replaced. An open Streaming Markdown Container remains transient until its closing boundary or a normal turn boundary makes it complete.
|
|
43
51
|
_Avoid_: history render, live Markdown rerender
|
|
@@ -192,6 +200,26 @@ _Avoid_: level (in any user-visible text), Max (OpenWorker's transitional name f
|
|
|
192
200
|
The one-line purpose statement shown next to a Model Tier wherever a model name follows it (tier menu, first-run wizard): Lite "Quick answers, small edits", Pro "Everyday coding", Elite "Deep reasoning, hardest problems". `/config` appends a cost clause to the same tagline. Markers such as "(default)" and "(current)" are appended by the display layer, never written into the tagline.
|
|
193
201
|
_Avoid_: level description, help text
|
|
194
202
|
|
|
203
|
+
## Next-Step Suggestion Language
|
|
204
|
+
|
|
205
|
+
**Next-Step Suggestion**:
|
|
206
|
+
A short, single-line prediction of what the user would naturally type next, generated once after a user-authored turn completes normally and shown as gray ghost text in the empty input box. It predicts the user's words, not the assistant's advice: it is never an evaluation, a question, or a new idea. It is one-shot per turn: once accepted, or dismissed by any input, busy transition, mode change or session replacement, it does not return for that turn.
|
|
207
|
+
_Avoid_: completion / 补全 (that continues text the user already typed), prediction (names the mechanism), placeholder (that is the queued-message hint's slot), prompt suggestion (Claude Code's name)
|
|
208
|
+
|
|
209
|
+
**Suggestion Acceptance**:
|
|
210
|
+
The explicit key action that copies a Next-Step Suggestion into the input box as real text, leaving the user to edit or submit it. Acceptance never submits. `Enter` on an empty box never accepts.
|
|
211
|
+
_Avoid_: auto-submit, one-key send
|
|
212
|
+
|
|
213
|
+
## Bottom Band Status Language
|
|
214
|
+
|
|
215
|
+
**Task List Panel**:
|
|
216
|
+
The list of the run's tasks shown in the bottom interaction band while the session is busy and unfinished tasks exist. Its title line normally carries the "working" signal (breathing dot, elapsed time, interrupt hint), so the standalone loading line stays hidden while it is shown.
|
|
217
|
+
_Avoid_: todo panel, tasklist (spoken shorthand only)
|
|
218
|
+
|
|
219
|
+
**Stall Status**:
|
|
220
|
+
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.
|
|
221
|
+
_Avoid_: blocking status ("blocking" in this repo means blocking the event loop), waiting state
|
|
222
|
+
|
|
195
223
|
## Relationships
|
|
196
224
|
|
|
197
225
|
- A **Core Slash Command** is always registered with `source="builtin"` on the Execution Axis. Its name belongs to the **Reserved Name Set** and cannot be overridden by any markdown-template command.
|
|
@@ -237,6 +265,14 @@ _Avoid_: level description, help text
|
|
|
237
265
|
- The word "tier" is reserved for user-visible text; the word "level" stays on the SDK contract, settings keys and RPC fields. Effort has its own ladder (`low`…`max`); a Model Tier name must never coincide with an effort level name.
|
|
238
266
|
- **Tier Taglines** exist in exactly one place; every surface (tier menu, statusline, `/config`, wizard, preflight summary, endpoint warnings) derives from it.
|
|
239
267
|
|
|
268
|
+
- A **Next-Step Suggestion** is generated only when the **Attention State** is idle after a turn that ended with `completed`; interrupted or failed turns, and turns not authored by the user, never produce one.
|
|
269
|
+
- A **Next-Step Suggestion** and an Idle Recap may both follow the same turn; they occupy different surfaces (input box vs. scrollback) and neither suppresses the other.
|
|
270
|
+
- **Suggestion Acceptance** follows the inline-completion PRD rule that `Enter` submits only the user's real input; this deliberately differs from Claude Code, where an empty-box `Enter` submits the suggestion.
|
|
271
|
+
- A **Safe Clear** after **Suggestion Acceptance** returns an empty box without the suggestion: the suggestion is one-shot.
|
|
272
|
+
|
|
273
|
+
- The bottom interaction band shows at most one "working" signal at a time. During a **Stall Status** the loading line carries it and the **Task List Panel** is hidden entirely; when the Stall Status ends, the Task List Panel returns unchanged.
|
|
274
|
+
- Running tools are not a **Stall Status**: the running-tool list and the **Task List Panel** may share the screen.
|
|
275
|
+
|
|
240
276
|
## Flagged ambiguities
|
|
241
277
|
|
|
242
278
|
- 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.4b9
|
|
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.16
|
|
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
|
|
@@ -247,14 +247,6 @@ LOADING_SPINNER_FRAMES: tuple[str, ...] = (
|
|
|
247
247
|
"⠏",
|
|
248
248
|
)
|
|
249
249
|
|
|
250
|
-
HIDDEN_THINKING_BADGES: tuple[str, ...] = (
|
|
251
|
-
"ultra thinking",
|
|
252
|
-
"deep thinking",
|
|
253
|
-
"extended thinking",
|
|
254
|
-
"thinking some more with max effort"
|
|
255
|
-
)
|
|
256
|
-
|
|
257
|
-
|
|
258
250
|
def breathing_dot_color(frame: int) -> str:
|
|
259
251
|
"""Return the breathing dot color for a given animation frame."""
|
|
260
252
|
phase = (frame // 4) % len(BREATH_DOT_COLORS)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Commit, push, and open (or update) a pull request / merge request
|
|
3
3
|
argument-hint: [title hint]
|
|
4
|
-
aliases: [mr]
|
|
4
|
+
aliases: [open-mr]
|
|
5
5
|
---
|
|
6
6
|
Commit any pending changes, push the branch, and open a pull request (GitHub) or merge request (GitLab) for it — or update the existing one.
|
|
7
7
|
|
|
@@ -4,6 +4,7 @@ Revision 5: 6 项偏好(display_thinking, model_level, memory_background, memo
|
|
|
4
4
|
Revision 6: 追加 disabled_skills——由 /skills 菜单管理,不进 /config picker 字段序。
|
|
5
5
|
Revision 7: 追加 stream_pacing——assistant 正文刷入节奏四档(CLI-only 投影)。
|
|
6
6
|
Revision 8: 追加 display_language——界面语言四档(CLI-only 投影,auto = 跟随系统探测)。
|
|
7
|
+
Revision 9: 追加 suggestion_enabled——下一步建议开关(CLI-only 投影)。
|
|
7
8
|
"""
|
|
8
9
|
from __future__ import annotations
|
|
9
10
|
|
|
@@ -29,6 +30,7 @@ class ConfigSnapshot:
|
|
|
29
30
|
memory_dreaming_enabled: bool = True
|
|
30
31
|
token_cost_enabled: bool = False
|
|
31
32
|
recap_enabled: bool = True
|
|
33
|
+
suggestion_enabled: bool = True
|
|
32
34
|
disabled_skills: tuple[str, ...] = ()
|
|
33
35
|
"""按名禁用的 skill 名单,投影为 AgentConfig.disabled_skills。
|
|
34
36
|
|
|
@@ -65,5 +67,8 @@ class ConfigSnapshot:
|
|
|
65
67
|
def with_recap(self, enabled: bool) -> "ConfigSnapshot":
|
|
66
68
|
return replace(self, recap_enabled=enabled)
|
|
67
69
|
|
|
70
|
+
def with_suggestion(self, enabled: bool) -> "ConfigSnapshot":
|
|
71
|
+
return replace(self, suggestion_enabled=enabled)
|
|
72
|
+
|
|
68
73
|
def with_disabled_skills(self, names: tuple[str, ...]) -> "ConfigSnapshot":
|
|
69
74
|
return replace(self, disabled_skills=tuple(names))
|
|
@@ -47,13 +47,16 @@ _BOOL_FIELDS = {
|
|
|
47
47
|
ConfigField.MEMORY_DREAMING,
|
|
48
48
|
ConfigField.TOKEN_COST,
|
|
49
49
|
ConfigField.RECAP,
|
|
50
|
+
ConfigField.SUGGESTION,
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
|
|
53
54
|
def _field_label(f: ConfigField) -> str:
|
|
54
|
-
"""
|
|
55
|
+
"""新增文案的字段(语言、建议开关)按规则走 i18n 渲染时取词;旧标签维持英文字面量,按切片另迁。"""
|
|
55
56
|
if f == ConfigField.LANGUAGE:
|
|
56
57
|
return i18n(message.config_language_label)
|
|
58
|
+
if f == ConfigField.SUGGESTION:
|
|
59
|
+
return i18n(message.config_suggestion_label)
|
|
57
60
|
return _FIELD_LABELS[f]
|
|
58
61
|
|
|
59
62
|
|
|
@@ -179,6 +182,8 @@ class ConfigPickerUI:
|
|
|
179
182
|
return f"[ {'on ' if snap.token_cost_enabled else 'off'} ]"
|
|
180
183
|
if f == ConfigField.RECAP:
|
|
181
184
|
return f"[ {'on ' if snap.recap_enabled else 'off'} ]"
|
|
185
|
+
if f == ConfigField.SUGGESTION:
|
|
186
|
+
return f"[ {'on ' if snap.suggestion_enabled else 'off'} ]"
|
|
182
187
|
return ""
|
|
183
188
|
|
|
184
189
|
def _subview_fragments(self) -> list[tuple[str, str]]:
|
{comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config/picker_state.py
RENAMED
|
@@ -28,6 +28,7 @@ class ConfigField(Enum):
|
|
|
28
28
|
MEMORY_DREAMING = "memory_dreaming"
|
|
29
29
|
TOKEN_COST = "token_cost"
|
|
30
30
|
RECAP = "recap"
|
|
31
|
+
SUGGESTION = "suggestion"
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
class ViewMode(Enum):
|
|
@@ -62,6 +63,7 @@ _FIELD_ORDER = (
|
|
|
62
63
|
ConfigField.MEMORY_DREAMING,
|
|
63
64
|
ConfigField.TOKEN_COST,
|
|
64
65
|
ConfigField.RECAP,
|
|
66
|
+
ConfigField.SUGGESTION,
|
|
65
67
|
)
|
|
66
68
|
|
|
67
69
|
_MODEL_LEVEL_VALUES: tuple[ModelLevelPreset, ...] = ("LOW", "MID", "HIGH")
|
|
@@ -159,6 +161,8 @@ class ConfigPickerState:
|
|
|
159
161
|
self.draft = self.draft.with_token_cost(not self.draft.token_cost_enabled)
|
|
160
162
|
elif f == ConfigField.RECAP:
|
|
161
163
|
self.draft = self.draft.with_recap(not self.draft.recap_enabled)
|
|
164
|
+
elif f == ConfigField.SUGGESTION:
|
|
165
|
+
self.draft = self.draft.with_suggestion(not self.draft.suggestion_enabled)
|
|
162
166
|
elif f == ConfigField.MODEL_LEVEL:
|
|
163
167
|
cur = _MODEL_LEVEL_VALUES.index(self.draft.model_level)
|
|
164
168
|
next_v = _MODEL_LEVEL_VALUES[(cur + 1) % len(_MODEL_LEVEL_VALUES)]
|
|
@@ -41,6 +41,7 @@ _CLI_CONFIG_MODEL_SECTION = "model"
|
|
|
41
41
|
_CLI_CONFIG_MEMORY_SECTION = "memory"
|
|
42
42
|
_CLI_CONFIG_TOKEN_COST_SECTION = "token_cost"
|
|
43
43
|
_CLI_CONFIG_RECAP_SECTION = "recap"
|
|
44
|
+
_CLI_CONFIG_SUGGESTION_SECTION = "suggestion"
|
|
44
45
|
_CLI_CONFIG_SKILLS_SECTION = "skills"
|
|
45
46
|
|
|
46
47
|
|
|
@@ -339,6 +340,19 @@ def _apply_cli_config(snapshot: ConfigSnapshot, section: dict[str, Any]) -> Conf
|
|
|
339
340
|
if parsed_bool is not None:
|
|
340
341
|
snapshot = snapshot.with_recap(parsed_bool)
|
|
341
342
|
|
|
343
|
+
suggestion = _named_object(
|
|
344
|
+
section,
|
|
345
|
+
_CLI_CONFIG_SUGGESTION_SECTION,
|
|
346
|
+
"comate_cli.config.suggestion",
|
|
347
|
+
)
|
|
348
|
+
parsed_bool = _named_bool(
|
|
349
|
+
suggestion,
|
|
350
|
+
"enabled",
|
|
351
|
+
"comate_cli.config.suggestion.enabled",
|
|
352
|
+
)
|
|
353
|
+
if parsed_bool is not None:
|
|
354
|
+
snapshot = snapshot.with_suggestion(parsed_bool)
|
|
355
|
+
|
|
342
356
|
skills = _named_object(
|
|
343
357
|
section,
|
|
344
358
|
_CLI_CONFIG_SKILLS_SECTION,
|
|
@@ -450,6 +464,7 @@ def build_cli_config_settings(snapshot: ConfigSnapshot) -> dict[str, Any]:
|
|
|
450
464
|
"model": {"level": snapshot.model_level.lower()},
|
|
451
465
|
"token_cost": {"enabled": snapshot.token_cost_enabled},
|
|
452
466
|
"recap": {"enabled": snapshot.recap_enabled},
|
|
467
|
+
"suggestion": {"enabled": snapshot.suggestion_enabled},
|
|
453
468
|
# 不含 skills:禁用名单写 SDK 级共享 key,见 apply_cli_config_snapshot_to_settings。
|
|
454
469
|
}
|
|
455
470
|
|
{comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/custom_slash_commands.py
RENAMED
|
@@ -51,7 +51,7 @@ class CustomSlashCommand:
|
|
|
51
51
|
source_path: Path
|
|
52
52
|
argument_hint: str | None = None
|
|
53
53
|
aliases: tuple[str, ...] = ()
|
|
54
|
-
"""frontmatter `aliases:`(如 `/pr` 的 `mr`)。注册时与已占用名字冲突的别名会被丢弃。"""
|
|
54
|
+
"""frontmatter `aliases:`(如 `/open-pr` 的 `open-mr`)。注册时与已占用名字冲突的别名会被丢弃。"""
|
|
55
55
|
|
|
56
56
|
def scope_label(self) -> str:
|
|
57
57
|
if self.namespace:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Effort 档位 → 图标 / 颜色 / 文案的唯一映射。
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
菜单(/effort 刻度尺、/model 档位提示)、statusline、Thinking Badge 的显示都只经这里,禁止各自重算——
|
|
4
4
|
"看到符号就能对上档位"靠的是这一份映射,不是几份巧合一致的实现。
|
|
5
5
|
"""
|
|
6
6
|
from __future__ import annotations
|
|
@@ -83,6 +83,28 @@ def rainbow_fragments(text: str, *, frame: int | None = None) -> list[tuple[str,
|
|
|
83
83
|
return [(f"fg:{palette[(offset + i) % len(palette)]} bold", ch) for i, ch in enumerate(text)]
|
|
84
84
|
|
|
85
85
|
|
|
86
|
+
# Thinking Badge 短语(2026-10-04 用户拍板)。固定英文,不进 i18n(rules/comate-cli-i18n.md 豁免)。
|
|
87
|
+
# high 及以上同一句式、只换档位名;medium / low 不用此句式("some more" 与低档语义冲突)。
|
|
88
|
+
# 只换字不换色:badge 颜色固定呼吸黄,不取档位色(8-30 档位色版被回退,见 rules/effort.md)。
|
|
89
|
+
THINKING_BADGE_PHRASES: dict[str, str] = {
|
|
90
|
+
ULTRACODE: "ultra thinking",
|
|
91
|
+
"max": "thinking some more with max effort",
|
|
92
|
+
"xhigh": "thinking some more with xhigh effort",
|
|
93
|
+
"high": "thinking some more with high effort",
|
|
94
|
+
"medium": "thinking",
|
|
95
|
+
"low": "light thinking",
|
|
96
|
+
}
|
|
97
|
+
# 拿不到生效档(auto / 不支持 / off)时的中性词:不冒充任何高档。
|
|
98
|
+
THINKING_BADGE_NEUTRAL = "thinking"
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def thinking_badge_text(display: EffortDisplay | None) -> str:
|
|
102
|
+
"""Thinking Badge 文案:按真实生效档挑词;无生效档或无来源(None)时返回中性词。"""
|
|
103
|
+
if display is not None and display.kind in ("level", "ultracode") and display.level:
|
|
104
|
+
return THINKING_BADGE_PHRASES.get(display.level, THINKING_BADGE_NEUTRAL)
|
|
105
|
+
return THINKING_BADGE_NEUTRAL
|
|
106
|
+
|
|
107
|
+
|
|
86
108
|
def statusline_text(display: EffortDisplay) -> str:
|
|
87
109
|
"""statusline 文案(纯文字,不带图标);auto / 不支持时返回空串(整段隐藏)。"""
|
|
88
110
|
if display.kind in ("level", "off", "ultracode") and display.level:
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
import random
|
|
5
4
|
import re
|
|
6
5
|
import threading
|
|
7
6
|
import time
|
|
@@ -9,12 +8,16 @@ import uuid
|
|
|
9
8
|
from collections import deque
|
|
10
9
|
from dataclasses import dataclass, field
|
|
11
10
|
from pathlib import Path
|
|
12
|
-
from typing import Any, Callable, Literal
|
|
11
|
+
from typing import TYPE_CHECKING, Any, Callable, Literal
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING: # 仅注解用;effort_style 推迟到首个隐藏 thinking delta 才 import
|
|
14
|
+
from comate_cli.terminal_agent.effort_style import EffortDisplay
|
|
13
15
|
|
|
14
16
|
from comate_agent_sdk.agent.events import (
|
|
15
17
|
CompactionResultEvent,
|
|
16
18
|
CompactionStartedEvent,
|
|
17
19
|
FixedOverheadDetail,
|
|
20
|
+
IdlePruneEvent,
|
|
18
21
|
JobCompletedEvent,
|
|
19
22
|
JobProgressEvent,
|
|
20
23
|
JobStartedEvent,
|
|
@@ -52,7 +55,6 @@ from comate_agent_sdk.agent.events import (
|
|
|
52
55
|
from rich.console import RenderableType
|
|
53
56
|
from rich.text import Text
|
|
54
57
|
|
|
55
|
-
from comate_cli.terminal_agent.animations import HIDDEN_THINKING_BADGES
|
|
56
58
|
from comate_cli.terminal_agent.figures import (
|
|
57
59
|
BOTTOM_LEFT_CROP,
|
|
58
60
|
BULLET_OPERATOR,
|
|
@@ -223,16 +225,22 @@ def _tool_status_line(state: "_RunningTool", elapsed_seconds: float) -> str:
|
|
|
223
225
|
"Running" 固定英文、不走 i18n 三语表:规则所有者 2026-08-24 显式豁免,
|
|
224
226
|
对齐 Claude Code 原版观感。
|
|
225
227
|
"""
|
|
226
|
-
# Bash 有进程可以移交后台,ctrl+b 提示只给它;Read / Grep 显示这个就是撒谎。
|
|
227
|
-
background_hint = (
|
|
228
|
-
f" {i18n(i18n_message.bash_background_hint)}" if state.tool_name == "Bash" else ""
|
|
229
|
-
)
|
|
230
228
|
if elapsed_seconds < TOOL_STATUS_DETAIL_VISIBLE_AFTER_SECONDS:
|
|
231
|
-
return f"{BOTTOM_LEFT_CROP} Running{ELLIPSIS}
|
|
229
|
+
return f"{BOTTOM_LEFT_CROP} Running{ELLIPSIS}"
|
|
232
230
|
parts = [_format_duration(elapsed_seconds)]
|
|
233
231
|
if state.timeout_display:
|
|
234
232
|
parts.append(f"timeout {_humanize_timeout_display(state.timeout_display)}")
|
|
235
|
-
return f"{BOTTOM_LEFT_CROP} Running{ELLIPSIS} ({f' {MIDDLE_DOT} '.join(parts)})
|
|
233
|
+
return f"{BOTTOM_LEFT_CROP} Running{ELLIPSIS} ({f' {MIDDLE_DOT} '.join(parts)})"
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def _has_background_hint(state: "_RunningTool") -> bool:
|
|
237
|
+
# Bash 有进程可以移交后台,ctrl+b 提示只给它;Read / Grep 显示这个就是撒谎。
|
|
238
|
+
return state.tool_name == "Bash"
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def _background_hint_line() -> str:
|
|
242
|
+
"""Running 状态行下面独占一行的 ctrl+b 提示,与 "Running" 首字母同列。"""
|
|
243
|
+
return f" {i18n(i18n_message.bash_background_hint)}"
|
|
236
244
|
|
|
237
245
|
|
|
238
246
|
def _format_tokens(token_count: int) -> str:
|
|
@@ -495,6 +503,8 @@ class EventRenderer:
|
|
|
495
503
|
self._turn_received_text_delta: bool = False
|
|
496
504
|
self._turn_received_thinking_delta: bool = False
|
|
497
505
|
self._hidden_thinking_badge_text: str = ""
|
|
506
|
+
# TUI 注入:会话真实生效档的显示投影,供 Thinking Badge 挑词。
|
|
507
|
+
self._effort_display_cb: Callable[[], "EffortDisplay | None"] = lambda: None
|
|
498
508
|
self._text_delta_started: bool = False
|
|
499
509
|
self._active_text_message_id: str | None = None
|
|
500
510
|
# ━━━━━ spec §4.1 新管道状态字段(Phase 1.2 引入,Phase 4-6 接入) ━━━━━
|
|
@@ -883,7 +893,10 @@ class EventRenderer:
|
|
|
883
893
|
if self._show_thinking_cb():
|
|
884
894
|
self._hidden_thinking_badge_text = ""
|
|
885
895
|
elif not self._hidden_thinking_badge_text:
|
|
886
|
-
|
|
896
|
+
# badge 非空 = 本次请求已挑过;text / tool / turn 边界清空后下次请求重读档位
|
|
897
|
+
from comate_cli.terminal_agent.effort_style import thinking_badge_text
|
|
898
|
+
|
|
899
|
+
self._hidden_thinking_badge_text = thinking_badge_text(self._effort_display_cb())
|
|
887
900
|
self._thinking_batch += delta
|
|
888
901
|
while "\n" in self._thinking_batch:
|
|
889
902
|
line, self._thinking_batch = self._thinking_batch.split("\n", 1)
|
|
@@ -1349,6 +1362,8 @@ class EventRenderer:
|
|
|
1349
1362
|
total_lines += 1
|
|
1350
1363
|
else:
|
|
1351
1364
|
total_lines += 2 # 签名行 + Running 状态行
|
|
1365
|
+
if _has_background_hint(state):
|
|
1366
|
+
total_lines += 1 # ctrl+b 提示行
|
|
1352
1367
|
return total_lines
|
|
1353
1368
|
|
|
1354
1369
|
def loading_state(self) -> LoadingState:
|
|
@@ -1812,6 +1827,8 @@ class EventRenderer:
|
|
|
1812
1827
|
lines_to_add += 1
|
|
1813
1828
|
else:
|
|
1814
1829
|
lines_to_add = 2 # 签名行 + Running 状态行
|
|
1830
|
+
if _has_background_hint(state):
|
|
1831
|
+
lines_to_add += 1 # ctrl+b 提示行
|
|
1815
1832
|
|
|
1816
1833
|
if len(entries) + lines_to_add > normalized_limit:
|
|
1817
1834
|
remaining_tools = len(tool_items) - idx
|
|
@@ -1868,6 +1885,8 @@ class EventRenderer:
|
|
|
1868
1885
|
(f"fg:{theme.TEXT_BRIGHT}", paren),
|
|
1869
1886
|
]))
|
|
1870
1887
|
entries.append((1, _tool_status_line(state, elapsed_seconds)))
|
|
1888
|
+
if _has_background_hint(state):
|
|
1889
|
+
entries.append((1, _background_hint_line()))
|
|
1871
1890
|
|
|
1872
1891
|
return entries[:normalized_limit]
|
|
1873
1892
|
|
|
@@ -2374,6 +2393,21 @@ class EventRenderer:
|
|
|
2374
2393
|
self._append_history_entry(
|
|
2375
2394
|
HistoryEntry(entry_type="thinking", text=thinking)
|
|
2376
2395
|
)
|
|
2396
|
+
case IdlePruneEvent(
|
|
2397
|
+
item_count=item_count,
|
|
2398
|
+
tokens_saved=tokens_saved,
|
|
2399
|
+
idle_seconds=idle_seconds,
|
|
2400
|
+
):
|
|
2401
|
+
# 空闲修剪:模型接下来会重读文件,先给用户一行解释(票 03)
|
|
2402
|
+
self.append_system_message(
|
|
2403
|
+
i18n(
|
|
2404
|
+
i18n_message.idle_prune_notice,
|
|
2405
|
+
item_count=item_count,
|
|
2406
|
+
tokens_saved=f"{tokens_saved:,}",
|
|
2407
|
+
idle_hours=f"{idle_seconds / 3600:.1f}",
|
|
2408
|
+
),
|
|
2409
|
+
severity="info",
|
|
2410
|
+
)
|
|
2377
2411
|
case CompactionStartedEvent(
|
|
2378
2412
|
current_tokens=_,
|
|
2379
2413
|
threshold=_,
|
|
@@ -31,7 +31,7 @@ EN: dict[str, str] = {
|
|
|
31
31
|
"bash_background_help_line": (
|
|
32
32
|
"ctrl+b - move the running shell command (yours or the model's) to the background"
|
|
33
33
|
),
|
|
34
|
-
"bash_background_hint": "ctrl+b to run in background",
|
|
34
|
+
"bash_background_hint": "(ctrl+b to run in background)",
|
|
35
35
|
"bash_background_no_target": "No shell command is running in the foreground.",
|
|
36
36
|
"bash_background_requested": "Moving the command to the background…",
|
|
37
37
|
"compact_fixed_overhead_advice_mcp": (
|
|
@@ -55,6 +55,7 @@ EN: dict[str, str] = {
|
|
|
55
55
|
),
|
|
56
56
|
"config_language_label": "UI Language",
|
|
57
57
|
"config_language_restart_hint": "Interface language takes effect after restart.",
|
|
58
|
+
"config_suggestion_label": "Next-step suggestion",
|
|
58
59
|
"custom_command_alias_conflict": (
|
|
59
60
|
"Alias '/{alias}' of custom command '/{command_name}' is already taken by another command; ignored."
|
|
60
61
|
),
|
|
@@ -122,6 +123,10 @@ EN: dict[str, str] = {
|
|
|
122
123
|
"goal_paused_hint": (
|
|
123
124
|
"Goal paused. Use /goal resume to continue, or /goal clear to drop it."
|
|
124
125
|
),
|
|
126
|
+
"idle_prune_notice": (
|
|
127
|
+
"Pruned {item_count} older tool results, saving ~{tokens_saved} tokens "
|
|
128
|
+
"(idle for {idle_hours} h)"
|
|
129
|
+
),
|
|
125
130
|
"image_clipboard_empty": "No image in the clipboard.",
|
|
126
131
|
"image_clipboard_reader_missing": (
|
|
127
132
|
"No clipboard reader command found (xclip or wl-paste). "
|
|
@@ -159,6 +164,14 @@ EN: dict[str, str] = {
|
|
|
159
164
|
"Interrupt signal sent. Press Esc again to force interrupt, "
|
|
160
165
|
"or Ctrl+C again to exit."
|
|
161
166
|
),
|
|
167
|
+
"mcp_server_tools_enabled_of_total": "Tools: {enabled_count} / {total_count} tools",
|
|
168
|
+
"mcp_tool_status_disabled": "Status: disabled",
|
|
169
|
+
"mcp_tool_status_enabled": "Status: enabled",
|
|
170
|
+
"mcp_tool_toggle_apply_failed": "The setting is saved, but this session did not apply it: {error}",
|
|
171
|
+
"mcp_tool_toggle_save_failed": "Could not save the tool setting: {error}",
|
|
172
|
+
"mcp_tools_count_enabled_of_total": "{enabled_count} / {total_count} tools",
|
|
173
|
+
"mcp_tools_key_hints": "or k/j: Move Space: Turn on/off Enter: Details Esc: Back",
|
|
174
|
+
"mcp_tools_read_only": "The config of this server is not in a .mcp.json file. You cannot change its tools here.",
|
|
162
175
|
"mode_switch_failed": "Failed to switch permission mode: {error}",
|
|
163
176
|
"output_style_cancelled": "Output style change cancelled.",
|
|
164
177
|
"output_style_global_requires_name": "--global needs a style name, e.g. /output-style learning --global",
|
|
@@ -259,6 +272,10 @@ EN: dict[str, str] = {
|
|
|
259
272
|
"rpc_ws_port_missing": "--port requires a port number (0 lets the system pick a free one)",
|
|
260
273
|
"rpc_ws_port_without_rpc_ws": "--port can only be used with --rpc-ws",
|
|
261
274
|
"skill_loaded": "Successfully loaded skill",
|
|
275
|
+
"skill_slash_name_conflict": (
|
|
276
|
+
"Skill '{skill_name}' has the same name as an existing command, so '/{skill_name}' runs that command. "
|
|
277
|
+
"The model can still use this skill through the Skill tool."
|
|
278
|
+
),
|
|
262
279
|
"shell_command_failed": "Failed to run the shell command: {error}",
|
|
263
280
|
"shell_command_queued": "Shell command queued; it runs after the current task finishes.",
|
|
264
281
|
"shell_help_line": (
|
|
@@ -321,7 +338,7 @@ EN: dict[str, str] = {
|
|
|
321
338
|
"transcript_empty": "No transcript entries yet. Send a message first.",
|
|
322
339
|
"transcript_viewer_failed": "Transcript viewer failed: {error}",
|
|
323
340
|
"webfetch_fetched": "Fetched {url} ∙ {chars} chars",
|
|
324
|
-
"workflow_approval_agent_limit": "agent calls: up to {max_calls}, {concurrency} in parallel; inner agents are not approved one by one",
|
|
341
|
+
"workflow_approval_agent_limit": "agent calls: up to {max_calls}, {concurrency} in parallel · llm calls: up to {max_llm_calls}, {llm_concurrency} in parallel; inner agents are not approved one by one",
|
|
325
342
|
"workflow_approval_no_phases": "phases: none declared in the script",
|
|
326
343
|
"workflow_approval_phases": "phases: {phases}",
|
|
327
344
|
"workflow_approval_resume": "resumes run {run_id}: finished agent calls are replayed",
|
|
@@ -341,10 +358,12 @@ EN: dict[str, str] = {
|
|
|
341
358
|
"workflows_empty": 'No workflow runs in this session yet.',
|
|
342
359
|
"workflows_footer_agent": '↑/↓ scroll · PgUp/PgDn page · ←/Esc back · q close',
|
|
343
360
|
"workflows_footer_list": '↑/↓ select · Enter open · x stop · Esc/q close',
|
|
344
|
-
"workflows_footer_run": '↑/↓ select
|
|
361
|
+
"workflows_footer_run": '↑/↓ select call · Enter open · x stop · ←/Esc back · q close',
|
|
345
362
|
"workflows_header_meta": '{running} running · {total} total',
|
|
346
|
-
"workflows_list_metrics": '{progress} · {
|
|
347
|
-
"
|
|
363
|
+
"workflows_list_metrics": '{progress} · {calls} calls · {elapsed}',
|
|
364
|
+
"workflows_llm_metrics": '{model} · {elapsed} · {tokens}',
|
|
365
|
+
"workflows_llm_title": 'LLM · {label}',
|
|
366
|
+
"workflows_no_agents": 'No calls yet.',
|
|
348
367
|
"workflows_phase_unassigned": '(no phase)',
|
|
349
368
|
"workflows_phase_undeclared": '(undeclared)',
|
|
350
369
|
"workflows_run_already_finished": 'Run already finished.',
|
|
@@ -356,9 +375,10 @@ EN: dict[str, str] = {
|
|
|
356
375
|
"workflows_section_error": 'Error',
|
|
357
376
|
"workflows_section_prompt": 'Prompt',
|
|
358
377
|
"workflows_section_result": 'Result',
|
|
378
|
+
"workflows_section_system": 'System',
|
|
359
379
|
"workflows_section_tool_calls": 'Tool calls',
|
|
360
380
|
"workflows_snapshot_empty": 'Workflow runs snapshot: none in this session.',
|
|
361
|
-
"workflows_snapshot_row": '- {run_id} · {name} · {status} · {progress} · {
|
|
381
|
+
"workflows_snapshot_row": '- {run_id} · {name} · {status} · {progress} · {calls} calls · {elapsed}',
|
|
362
382
|
"workflows_snapshot_title": 'Workflow runs snapshot:',
|
|
363
383
|
"workflows_status_aborted": 'aborted',
|
|
364
384
|
"workflows_status_completed": 'completed',
|