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.
Files changed (514) hide show
  1. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/CHANGELOG.md +15 -2
  2. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/CONTEXT.md +39 -3
  3. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/PKG-INFO +2 -2
  4. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/animations.py +0 -8
  5. 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
  6. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config/model.py +5 -0
  7. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config/picker.py +6 -1
  8. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config/picker_state.py +4 -0
  9. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config/store.py +15 -0
  10. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/custom_slash_commands.py +1 -1
  11. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/effort_style.py +23 -1
  12. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/event_renderer.py +44 -10
  13. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/i18n/_en.py +26 -6
  14. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/i18n/_ja.py +26 -6
  15. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/i18n/_zh.py +25 -6
  16. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/i18n/message.py +14 -0
  17. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/side_install.py +6 -0
  18. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/skills_menu.py +26 -10
  19. comate_cli-0.12.4b9/comate_cli/terminal_agent/suggestion/__init__.py +5 -0
  20. comate_cli-0.12.4b9/comate_cli/terminal_agent/suggestion/controller.py +118 -0
  21. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tips.py +8 -3
  22. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_approval_view.py +2 -0
  23. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_fold.py +3 -2
  24. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui.py +184 -44
  25. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/btw_view.py +2 -0
  26. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/commands.py +203 -24
  27. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/key_bindings.py +21 -0
  28. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/render_panels.py +17 -6
  29. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/shell_mode.py +10 -6
  30. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/update_check.py +34 -3
  31. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/workflows_panel.py +30 -14
  32. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/workflows_panel_model.py +26 -2
  33. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/pyproject.toml +2 -2
  34. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_model.py +15 -0
  35. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_picker_state.py +16 -2
  36. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_picker_ui.py +21 -0
  37. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_roundtrip.py +7 -0
  38. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_store_load.py +38 -0
  39. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_store_save.py +15 -0
  40. comate_cli-0.12.4b9/tests/suggestion/test_next_step_suggestion_controller.py +304 -0
  41. comate_cli-0.12.4b9/tests/suggestion/test_next_step_suggestion_render.py +147 -0
  42. comate_cli-0.12.4b9/tests/suggestion/test_tab_accepts_next_step_suggestion.py +160 -0
  43. comate_cli-0.12.4b9/tests/suggestion/test_tui_next_step_suggestion_integration.py +259 -0
  44. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ctrl_b_background.py +10 -5
  45. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_custom_slash_commands.py +26 -5
  46. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_effort_style.py +51 -0
  47. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_approval_wait.py +2 -1
  48. comate_cli-0.12.4b9/tests/test_event_renderer_idle_prune.py +51 -0
  49. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_streaming.py +58 -5
  50. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_i18n.py +14 -0
  51. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_mcp_slash_command.py +488 -0
  52. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_modal_panel_visibility.py +7 -0
  53. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_preflight.py +26 -1
  54. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_preflight_wizard_ui.py +3 -3
  55. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_running_tool_status_line.py +35 -13
  56. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_shell_mode.py +11 -6
  57. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_side_install.py +56 -0
  58. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_skills_slash_command.py +64 -6
  59. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_task_panel_rendering.py +10 -4
  60. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tips.py +15 -0
  61. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_todo_panel_busy_gating.py +66 -2
  62. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_approval_view_workflow.py +11 -2
  63. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_fold_panel.py +33 -31
  64. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_builtin_slash_chain.py +121 -3
  65. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_thinking_display.py +37 -0
  66. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_update_check.py +208 -35
  67. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_workflows_panel.py +76 -0
  68. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_workflows_panel_model.py +68 -1
  69. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/uv.lock +2 -2
  70. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/bash/3b0c312b1a234220818cb8cc15a12ea1565c69dc5f828351a492dab1add0cf84.txt +0 -0
  71. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/bash/b0696d5d44fdde7597b8e9bd706d61237290ebca0c1c99273799393a7af99316.txt +0 -0
  72. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/bash/e1164ab5f5f1e125db38bb44420532265c958f19533fbda8700db5a8aa4c3d68.txt +0 -0
  73. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/00f8013ce28fed8e3076db6490d6a3de8dbc1f57f5248a1f5e2710f11ab6849c.txt +0 -0
  74. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/0a5f3319bc1813a523b8d041831399f3ea694fcdb96f4b1df740300d08c60521.txt +0 -0
  75. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/17dc19a9b5faddcd056013e7783c8d23525d060b7b20a73ee241c569bedea6d8.txt +0 -0
  76. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/2b488f719c3431607773d9cebef4924ebfa33745adc68d8ee0f89596c608a218.txt +0 -0
  77. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/32ce175150a77180dda04a76ea66b9ee5b0c46ea0fd0842172bacece964d57a4.txt +0 -0
  78. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/43166c9eb998d1a426ce0c014348e39adc8c8e1d3d7a94ced4cc33ab268ecdeb.txt +0 -0
  79. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/4afc47414280761b7c94ff91f7477c4eb5602396da89303b403c6f3ef9535fd0.txt +0 -0
  80. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/56fca6c3112743a94cd0df58e04ee6dda31546ed53d50f8bf907dccb6f5329d3.txt +0 -0
  81. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/605fcb1ca26d1cb632e364dd044d280a12ad4f188db698d5bad57fe1ff556ce3.txt +0 -0
  82. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/6763a04477b314da76472e76696c8b03ee89fffc23ce74a22c634ea373840acd.txt +0 -0
  83. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/6d1856ff719ee695ed9205cf68723a263f8c70fe090295037c1c9a837f8eac13.txt +0 -0
  84. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/6e08c59431a214d8c3650a701cbaaf9125503d59d28476642f8b5a0ad6c8ed93.txt +0 -0
  85. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/746f6a3b34e30583972816a0052d99e8297096ba522d66027b085e3a0069b7db.txt +0 -0
  86. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/7c8fa2270ca7721e8619ba7eaec744100877330317dd5e8a1e42494a09579317.txt +0 -0
  87. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/7cc3e32a61277dc3e35039fdc1cac3691e147cd50d8d16fa75447de7d11abb77.txt +0 -0
  88. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/8203d4eaf35b0bb224cb12067e638b7f873ae0af05a590adedc02ae159a08099.txt +0 -0
  89. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/82a7ce335091c00f8aee0ff54b6a75ed25fb6f7a2f4bf8d29921c3f2704ada81.txt +0 -0
  90. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/82e9a29128ad224555ae0e85dddcc118d92a8f4faf4c8a3c3702c6b43dc71511.txt +0 -0
  91. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/83be41699a979e16de16f3095981346f337fda56a3c254420df953e2de87d982.txt +0 -0
  92. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/84074b6fda0e110d23094926c0d1846130be2b3870b1bcd5516243bae808b209.txt +0 -0
  93. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/a92368734a2d79c15eaba1c7d282bab2d4150ccde0e41e30628cfb6b7be6a678.txt +0 -0
  94. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/b02349374e026c124a60335b4b0e77698e4b7f8391f2466c827f6f80a8d596b2.txt +0 -0
  95. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/b41279d93d2b1f03e99bf2fdcd4477781edf3546256489e2d37f082fa414ef94.txt +0 -0
  96. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/bde0cfc02d38109cc02a28dd07611e464db9b47fef8b16fc25591866e5003316.txt +0 -0
  97. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/c0e234da2bfe338ffbce547372af90d36ce7580361b69664823d12fac048a86e.txt +0 -0
  98. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/c979b9589e166ae451c819fc8fc1efdf9eb042ce7af99e420a5b540f0d041a7a.txt +0 -0
  99. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/dd39676b55965a3e04c1b28c82cd9c15e335776f39f325f61854d3e48aa87859.txt +0 -0
  100. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/dec1ee9f38d117f649d0ba2cfb54b50d9ccd841833170c49614fa181a358013e.txt +0 -0
  101. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/eac0d88d65c24b10af556c030b795f3312cc70fc80f8f64575205ea1a6476264.txt +0 -0
  102. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/ef063804b585209aafbded7c27ad8d5eacbad17b3bb967022290a9efd01f6d13.txt +0 -0
  103. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/f75a98ad1ac3c085060f90492292060b3720dfa98c776e61a643b9824d1dc237.txt +0 -0
  104. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/faffcd8b4abd87e4abff3b72dcde673e844a4d7e230fbcc5c116ddd11815c37b.txt +0 -0
  105. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/fb29e07995891317ca0daa3257e541238908889bc7a68efeba695c8ac3a2db86.txt +0 -0
  106. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/grep_content/feed470ec463825f43ae4e1b92a5996b1dbad91605fe491f39c9ee60879b7155.txt +0 -0
  107. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/index.json +0 -0
  108. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/ls/5a0a29a96857998fdfe5696c09b9c60027a6529e21108e22a20f5227afeddb59.json +0 -0
  109. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/1f093e98c0f4026921bb2df0c7c04d6b55b51ec40c9fbf38ba57bd387399127d.txt +0 -0
  110. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/57c31009cc3665a6a672811ecf048cfb75ff7bae92598df943f492c53d39ca8e.txt +0 -0
  111. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/916a2e47f13fd22d3a73a4896c7a5edb3381b8a2c8322ce3ab8a4bf9da94c4a0.txt +0 -0
  112. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/91f5872f5b4b1b43f16589f7dd25e47236a805e848b37307cef464e881307fe1.txt +0 -0
  113. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/9871dc91ff9afef1303c74cf669996828a7db3dbff6c4c41fbac0a53fd7d195b.txt +0 -0
  114. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/af594562a5579ffc9bef105dc77ed26408b2408447005046c9c6505541e2776a.txt +0 -0
  115. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/c52ec3da48b3a731ed42cc357258a4627d2d11fab5ef14d3050fd50e748151d4.txt +0 -0
  116. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/f8c08a56feb0812b35a8e4b29a721d38c0aacd83ce3620c432d8b52114c14816.txt +0 -0
  117. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/artifacts/tool_result/fa30187a59d255f168806ee0de7a0a32b00535e53e7c5420aad1bac44b54a667.txt +0 -0
  118. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.agent/scheduled_prompts.json +0 -0
  119. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/.gitignore +0 -0
  120. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/README.md +0 -0
  121. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/__init__.py +0 -0
  122. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/__main__.py +0 -0
  123. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/device_identity.py +0 -0
  124. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/distribution.py +0 -0
  125. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/main.py +0 -0
  126. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/mcp_cli.py +0 -0
  127. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/__init__.py +0 -0
  128. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/app.py +0 -0
  129. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/approval_bridge.py +0 -0
  130. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/approval_content_preview.py +0 -0
  131. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/assistant_render.py +0 -0
  132. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/__init__.py +0 -0
  133. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/announcements.py +0 -0
  134. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/client.py +0 -0
  135. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/feedback.py +0 -0
  136. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/provider_snapshot.py +0 -0
  137. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/rating.py +0 -0
  138. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/runtime.py +0 -0
  139. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/session_report.py +0 -0
  140. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/session_title.py +0 -0
  141. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/backend/tasks.py +0 -0
  142. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/bash_command_display.py +0 -0
  143. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/builtin_commands/.keep +0 -0
  144. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/builtin_commands/commit.md +0 -0
  145. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/builtin_commands/implement-plan.md +0 -0
  146. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/builtin_commands/learn.md +0 -0
  147. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/clipboard_image.py +0 -0
  148. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/codenames.py +0 -0
  149. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config/__init__.py +0 -0
  150. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/config_check.py +0 -0
  151. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/console_profile.py +0 -0
  152. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/context_view.py +0 -0
  153. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/effort_menu.py +0 -0
  154. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/effort_ruler.py +0 -0
  155. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/env_utils.py +0 -0
  156. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/error_display.py +0 -0
  157. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/exit_confirm_view.py +0 -0
  158. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/exit_watchdog.py +0 -0
  159. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/figures.py +0 -0
  160. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/file_ref_hint.py +0 -0
  161. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/fragment_utils.py +0 -0
  162. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/goal_edit_view.py +0 -0
  163. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/goal_resume_view.py +0 -0
  164. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/history_printer.py +0 -0
  165. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/i18n/__init__.py +0 -0
  166. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/image_chips.py +0 -0
  167. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/input_geometry.py +0 -0
  168. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/jobs_picker.py +0 -0
  169. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/jobs_state.py +0 -0
  170. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/layout_coordinator.py +0 -0
  171. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/locale.py +0 -0
  172. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/logging_adapter.py +0 -0
  173. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/logging_file_handler.py +0 -0
  174. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/logo.py +0 -0
  175. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/markdown_render.py +0 -0
  176. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/mcp_serve.py +0 -0
  177. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/mention_completer.py +0 -0
  178. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/message_style.py +0 -0
  179. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/model_tier_style.py +0 -0
  180. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/models.py +0 -0
  181. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/output_style_menu.py +0 -0
  182. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/__init__.py +0 -0
  183. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/auto_update_runner.py +0 -0
  184. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/auto_update_store.py +0 -0
  185. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/components/__init__.py +0 -0
  186. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/components/detail_view.py +0 -0
  187. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/components/plugin_list.py +0 -0
  188. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/components/search_box.py +0 -0
  189. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/components/tab_bar.py +0 -0
  190. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/marketplace_install_view.py +0 -0
  191. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/operation_state.py +0 -0
  192. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/plugin_picker.py +0 -0
  193. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/tabs/__init__.py +0 -0
  194. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/tabs/discover_tab.py +0 -0
  195. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/tabs/errors_tab.py +0 -0
  196. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/tabs/installed_tab.py +0 -0
  197. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py +0 -0
  198. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/preflight.py +0 -0
  199. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/preflight_wizard.py +0 -0
  200. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/preflight_wizard_ui.py +0 -0
  201. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/print_mode.py +0 -0
  202. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/question_broker.py +0 -0
  203. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/question_view.py +0 -0
  204. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/recap/__init__.py +0 -0
  205. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/recap/controller.py +0 -0
  206. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/resume_picker.py +0 -0
  207. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/resume_preview.py +0 -0
  208. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/resume_selector.py +0 -0
  209. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/rpc_commands.py +0 -0
  210. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/rpc_relay.py +0 -0
  211. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/rpc_stdio.py +0 -0
  212. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/rpc_ws.py +0 -0
  213. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/scm_request_status.py +0 -0
  214. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/selection_menu.py +0 -0
  215. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/sigint_guard.py +0 -0
  216. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/skill_slash_input.py +0 -0
  217. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/slash_commands.py +0 -0
  218. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/startup.py +0 -0
  219. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/startup_profile.py +0 -0
  220. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/status_bar.py +0 -0
  221. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/statusline/__init__.py +0 -0
  222. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/statusline/model.py +0 -0
  223. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/statusline/picker.py +0 -0
  224. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/statusline/picker_state.py +0 -0
  225. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/statusline/store.py +0 -0
  226. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/stream_pacer.py +0 -0
  227. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/synchronized_output.py +0 -0
  228. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/text_effects.py +0 -0
  229. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/theme.py +0 -0
  230. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_fold_view.py +0 -0
  231. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_result_formatters.py +0 -0
  232. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_result_state.py +0 -0
  233. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_result_store.py +0 -0
  234. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_result_viewer.py +0 -0
  235. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tool_view.py +0 -0
  236. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/transcript_viewer.py +0 -0
  237. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/__init__.py +0 -0
  238. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/approval_queue.py +0 -0
  239. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/history_sync.py +0 -0
  240. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/input_behavior.py +0 -0
  241. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/mcp_connecting_view.py +0 -0
  242. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/resize_guard.py +0 -0
  243. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/run_clock.py +0 -0
  244. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/slash_command_registry.py +0 -0
  245. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/tui_parts/ui_mode.py +0 -0
  246. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/ultracode_keyword.py +0 -0
  247. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_agent/update_messages.py +0 -0
  248. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/terminal_title.py +0 -0
  249. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/comate_cli/update_cli.py +0 -0
  250. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/docs/cli-rpc-stdio-guide.md +0 -0
  251. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/docs/release-notes/0.12.3.md +0 -0
  252. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/docs/startup-performance.md +0 -0
  253. {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
  254. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/docs/superpowers/plans/2026-07-07-windows-update-manual-rollback.md +0 -0
  255. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/_fake_anthropic_server.py +0 -0
  256. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/_rpc_ws_client.py +0 -0
  257. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/__init__.py +0 -0
  258. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/config/test_skills_denylist_migration.py +0 -0
  259. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/conftest.py +0 -0
  260. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/fixtures/exit_watchdog_child.py +0 -0
  261. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/fixtures/fake_mcp_misbehaving_stdout.py +0 -0
  262. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/recap/test_idle_recap_controller.py +0 -0
  263. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/recap/test_recap_history_rendering.py +0 -0
  264. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/recap/test_tui_idle_recap_integration.py +0 -0
  265. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/statusline/__init__.py +0 -0
  266. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/statusline/test_model.py +0 -0
  267. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/statusline/test_picker_state.py +0 -0
  268. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/statusline/test_store.py +0 -0
  269. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_animations_styles.py +0 -0
  270. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_animator_shuffle.py +0 -0
  271. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_config_check_gate.py +0 -0
  272. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_exit_lifecycle.py +0 -0
  273. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_mcp_preload.py +0 -0
  274. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_mcp_preload_kick.py +0 -0
  275. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_preflight_gate.py +0 -0
  276. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_print_mode.py +0 -0
  277. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_profile_threading.py +0 -0
  278. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_pty_ctrl_b.py +0 -0
  279. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_pty_ctrl_c_exit.py +0 -0
  280. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_pty_shell_mode.py +0 -0
  281. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_pty_smoke.py +0 -0
  282. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_shutdown.py +0 -0
  283. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_startup_latency.py +0 -0
  284. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_startup_order.py +0 -0
  285. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_token_cost_config.py +0 -0
  286. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_app_usage_line.py +0 -0
  287. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_approval_bridge.py +0 -0
  288. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_approval_content_preview.py +0 -0
  289. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_announcements.py +0 -0
  290. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_client.py +0 -0
  291. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_feedback.py +0 -0
  292. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_provider_snapshot.py +0 -0
  293. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_rating.py +0 -0
  294. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_session_report.py +0 -0
  295. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_backend_tasks.py +0 -0
  296. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_btw_slash_command.py +0 -0
  297. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_busy_slash_gating.py +0 -0
  298. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_cli_project_root.py +0 -0
  299. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_clipboard_image_reader.py +0 -0
  300. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_commands_system_messages.py +0 -0
  301. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_compact_command_semantics.py +0 -0
  302. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_completion_context_activation.py +0 -0
  303. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_completion_status_panel.py +0 -0
  304. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_config_check.py +0 -0
  305. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_console_profile.py +0 -0
  306. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_context_command.py +0 -0
  307. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_context_view.py +0 -0
  308. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ctrl_c_clear_input.py +0 -0
  309. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_device_identity.py +0 -0
  310. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_discover_tab.py +0 -0
  311. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_distribution_contract.py +0 -0
  312. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_drain_frame_atomicity.py +0 -0
  313. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_effort_menu.py +0 -0
  314. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_effort_menu_frame_rate.py +0 -0
  315. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_effort_ruler.py +0 -0
  316. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_effort_slash_command.py +0 -0
  317. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_errors_tab.py +0 -0
  318. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer.py +0 -0
  319. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_boundary.py +0 -0
  320. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_e2e.py +0 -0
  321. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_fixed_overhead.py +0 -0
  322. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_jobs.py +0 -0
  323. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_log_boundary.py +0 -0
  324. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_log_queue.py +0 -0
  325. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_provider_overflow.py +0 -0
  326. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_shell.py +0 -0
  327. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_stream_pacing.py +0 -0
  328. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_stream_staging.py +0 -0
  329. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_tool_args_progress.py +0 -0
  330. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_event_renderer_tool_fold.py +0 -0
  331. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_exit_confirm_view.py +0 -0
  332. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_exit_guard.py +0 -0
  333. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_exit_watchdog.py +0 -0
  334. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_exit_watchdog_subprocess.py +0 -0
  335. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_file_ref_hint.py +0 -0
  336. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_format_error.py +0 -0
  337. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_edit_handlers.py +0 -0
  338. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_edit_view.py +0 -0
  339. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_paused_hint.py +0 -0
  340. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_resume_tui.py +0 -0
  341. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_resume_view.py +0 -0
  342. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_goal_slash_command.py +0 -0
  343. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_handle_error.py +0 -0
  344. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_drain_throttle.py +0 -0
  345. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_printer.py +0 -0
  346. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_printer_log.py +0 -0
  347. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_printer_styles.py +0 -0
  348. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_printer_subtitle_position.py +0 -0
  349. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_printer_tool_fold.py +0 -0
  350. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_sync.py +0 -0
  351. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_history_sync_tool_fold.py +0 -0
  352. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_image_chips.py +0 -0
  353. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_image_preprocess_offload_lag.py +0 -0
  354. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_import_weight.py +0 -0
  355. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_input_behavior.py +0 -0
  356. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_input_history.py +0 -0
  357. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_input_separator_counter.py +0 -0
  358. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_installed_tab.py +0 -0
  359. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_interrupt_exit_semantics.py +0 -0
  360. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_jobs_panel.py +0 -0
  361. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_jobs_picker.py +0 -0
  362. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_key_bindings_system_messages.py +0 -0
  363. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_layout_coordinator.py +0 -0
  364. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_loading_modal_suppression.py +0 -0
  365. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_loading_tip_picker.py +0 -0
  366. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_logging_adapter.py +0 -0
  367. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_logging_file_handler.py +0 -0
  368. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_logo.py +0 -0
  369. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_main_args.py +0 -0
  370. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_main_args_yolo.py +0 -0
  371. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_main_profile_entry.py +0 -0
  372. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_markdown_render.py +0 -0
  373. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_marketplaces_tab.py +0 -0
  374. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_mcp_cli.py +0 -0
  375. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_mcp_cli_scope_defaults.py +0 -0
  376. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_mcp_serve.py +0 -0
  377. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_mention_completer.py +0 -0
  378. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_menu_cursor_unification.py +0 -0
  379. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_message_style.py +0 -0
  380. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_modal_freeze_timing.py +0 -0
  381. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_model_switch_command.py +0 -0
  382. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_model_tier_style.py +0 -0
  383. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_no_raw_colors.py +0 -0
  384. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_output_style_slash_command.py +0 -0
  385. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_permission_mode_cycle.py +0 -0
  386. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_auto_update_runner.py +0 -0
  387. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_auto_update_store.py +0 -0
  388. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_auto_update_tui.py +0 -0
  389. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_operation_state.py +0 -0
  390. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_slash_commands.py +0 -0
  391. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_plugin_tui_components.py +0 -0
  392. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_preflight_copilot.py +0 -0
  393. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_pty_output_integrity.py +0 -0
  394. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_question_broker.py +0 -0
  395. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_question_key_bindings.py +0 -0
  396. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_question_view.py +0 -0
  397. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_resize_guard.py +0 -0
  398. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_resume_picker.py +0 -0
  399. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_resume_picker_exit_safety.py +0 -0
  400. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_resume_preview.py +0 -0
  401. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_resume_selector.py +0 -0
  402. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rewind_command_semantics.py +0 -0
  403. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_mode_logging.py +0 -0
  404. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_relay_dial_out.py +0 -0
  405. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_relay_e2e_smoke.py +0 -0
  406. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_relay_process_smoke.py +0 -0
  407. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_v4_stdio_smoke.py +0 -0
  408. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_v4_ws_smoke.py +0 -0
  409. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_rpc_ws_bind_failure.py +0 -0
  410. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_run_clock.py +0 -0
  411. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_scm_request_status.py +0 -0
  412. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_scrollback_write_encoding.py +0 -0
  413. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_selection_menu.py +0 -0
  414. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_session_auto_title.py +0 -0
  415. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_session_query_token_summary.py +0 -0
  416. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_settings_write_guard.py +0 -0
  417. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_shutdown_noise_guard.py +0 -0
  418. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_shutdown_noise_integration.py +0 -0
  419. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_sigint_guard.py +0 -0
  420. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_sigint_key_binding.py +0 -0
  421. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_skill_slash_input.py +0 -0
  422. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_slash_add_dir.py +0 -0
  423. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_slash_argument_hint.py +0 -0
  424. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_slash_clear.py +0 -0
  425. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_slash_completer.py +0 -0
  426. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_slash_registry.py +0 -0
  427. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_startup_import_budget.py +0 -0
  428. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_startup_profile.py +0 -0
  429. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_status_bar.py +0 -0
  430. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_status_bar_mid_turn_refresh.py +0 -0
  431. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_status_bar_request_status.py +0 -0
  432. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_status_bar_transient.py +0 -0
  433. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_stream_pacer.py +0 -0
  434. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_stream_pacing_tick.py +0 -0
  435. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_stream_staging_panel.py +0 -0
  436. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_style_class_coverage.py +0 -0
  437. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_synchronized_output.py +0 -0
  438. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tab_title.py +0 -0
  439. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_task_panel_format.py +0 -0
  440. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_task_panel_key_bindings.py +0 -0
  441. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_task_poll.py +0 -0
  442. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_terminal_title.py +0 -0
  443. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_theme.py +0 -0
  444. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_approval_key_bindings.py +0 -0
  445. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_approval_tui.py +0 -0
  446. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_approval_view.py +0 -0
  447. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_fold.py +0 -0
  448. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_fold_view.py +0 -0
  449. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_result_formatters.py +0 -0
  450. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_result_state.py +0 -0
  451. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_result_store.py +0 -0
  452. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_result_viewer.py +0 -0
  453. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_result_viewer_key_bindings.py +0 -0
  454. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_view.py +0 -0
  455. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tool_view_styles.py +0 -0
  456. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_transcript_viewer.py +0 -0
  457. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_transcript_viewer_tool_fold.py +0 -0
  458. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_deferred_prewarm.py +0 -0
  459. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_elapsed_status.py +0 -0
  460. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_esc_queue.py +0 -0
  461. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_exit_idempotence.py +0 -0
  462. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_exit_paced_tail.py +0 -0
  463. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_exit_pending_logs.py +0 -0
  464. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_hot_reload.py +0 -0
  465. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_image_chip_seed.py +0 -0
  466. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_image_paste.py +0 -0
  467. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_image_path_upgrade.py +0 -0
  468. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_image_restore.py +0 -0
  469. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_image_submit.py +0 -0
  470. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_interrupt_queue_recall.py +0 -0
  471. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_llm_retry_panel.py +0 -0
  472. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_loading_tip_rotation.py +0 -0
  473. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_local_interactive_barrier.py +0 -0
  474. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_mcp_init_gate.py +0 -0
  475. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_paste_history_persistence.py +0 -0
  476. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_paste_newline_guard.py +0 -0
  477. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_paste_placeholder.py +0 -0
  478. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_plugin_load.py +0 -0
  479. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_provider_error_shield.py +0 -0
  480. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_queue_pop_images.py +0 -0
  481. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_queue_preview.py +0 -0
  482. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_queue_sdk_source.py +0 -0
  483. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_replace_session_resume_hint.py +0 -0
  484. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_scheduled_fire_log.py +0 -0
  485. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_scratchpad_fold_wiring.py +0 -0
  486. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_send_undo_window.py +0 -0
  487. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_session_observers.py +0 -0
  488. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_shutdown_cancel_propagation.py +0 -0
  489. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_split_invariance.py +0 -0
  490. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_startup_latency.py +0 -0
  491. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_surrogate_repair.py +0 -0
  492. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_tool_result_registry_lifecycle.py +0 -0
  493. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_tui_window_too_small_fallback.py +0 -0
  494. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ui_mode_derivation.py +0 -0
  495. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ui_tick_exception_isolation.py +0 -0
  496. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ultracode_keyword.py +0 -0
  497. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ultracode_keyword_frame_rate.py +0 -0
  498. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ultracode_keyword_submit.py +0 -0
  499. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_ultracode_shimmer_render.py +0 -0
  500. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_update_cli.py +0 -0
  501. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_upstream_surrogate_merge_characterization.py +0 -0
  502. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_usage_command.py +0 -0
  503. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_wellformed_terminal_input.py +0 -0
  504. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_whitelabel_clear_logo.py +0 -0
  505. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_windows_sigint_console.py +0 -0
  506. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_wrap_user_text.py +0 -0
  507. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tests/test_zipapp_launcher_path.py +0 -0
  508. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/diagnose_windows_shim_rename.py +0 -0
  509. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/logo_lab.py +0 -0
  510. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/nico_preview.py +0 -0
  511. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/probe_conhost_char_width.py +0 -0
  512. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/probe_conhost_render_replay.py +0 -0
  513. {comate_cli-0.12.4b7 → comate_cli-0.12.4b9}/tools/startup_bench.py +0 -0
  514. {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
- `project > user > default` (plus `plugin` registered independently at runtime). When a Default Custom Command and a user/project custom command share a name, the higher-priority scope wins silently (no warning); only the winning entry reaches the registry.
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.4b7
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.14
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
- """语言行是新增文案,按规则走 i18n 渲染时取词;其余旧标签维持英文字面量,按切片另迁。"""
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]]:
@@ -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
 
@@ -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
- 菜单、statusline、/effort 结果行的显示都只经这里,禁止各自重算——
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}{background_hint}"
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)}){background_hint}"
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
- self._hidden_thinking_badge_text = random.choice(HIDDEN_THINKING_BADGES)
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 agent · Enter open · x stop · ←/Esc back · q close',
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} · {agents} agents · {elapsed}',
347
- "workflows_no_agents": 'No agent calls yet.',
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} · {agents} agents · {elapsed}',
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',