comate-cli 0.12.4b13__tar.gz → 0.12.6__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 (573) hide show
  1. comate_cli-0.12.6/.python-version +1 -0
  2. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/CHANGELOG.md +12 -0
  3. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/CONTEXT.md +69 -4
  4. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/PKG-INFO +15 -2
  5. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/README.md +13 -0
  6. comate_cli-0.12.6/bash_settle_diag.log +41 -0
  7. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/distribution.py +29 -0
  8. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/main.py +7 -0
  9. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/mcp_cli.py +191 -50
  10. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/app.py +81 -8
  11. comate_cli-0.12.6/comate_cli/terminal_agent/browser_open.py +41 -0
  12. comate_cli-0.12.6/comate_cli/terminal_agent/clipboard_text.py +126 -0
  13. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/context_view.py +53 -0
  14. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/effort_style.py +31 -0
  15. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/event_renderer.py +116 -16
  16. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/figures.py +3 -0
  17. comate_cli-0.12.6/comate_cli/terminal_agent/focus_events.py +24 -0
  18. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/history_printer.py +49 -33
  19. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/i18n/_en.py +124 -21
  20. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/i18n/_ja.py +124 -21
  21. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/i18n/_zh.py +116 -10
  22. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/i18n/message.py +107 -6
  23. comate_cli-0.12.6/comate_cli/terminal_agent/image_chips.py +250 -0
  24. comate_cli-0.12.6/comate_cli/terminal_agent/job_activity.py +57 -0
  25. comate_cli-0.12.6/comate_cli/terminal_agent/job_indicator.py +177 -0
  26. comate_cli-0.12.6/comate_cli/terminal_agent/jobs_menu.py +818 -0
  27. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/jobs_state.py +96 -72
  28. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/logging_adapter.py +31 -0
  29. comate_cli-0.12.6/comate_cli/terminal_agent/loop_freeze_watchdog.py +160 -0
  30. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/mcp_serve.py +72 -29
  31. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/menu_panel.py +78 -3
  32. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/message_style.py +20 -0
  33. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/models.py +5 -1
  34. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/marketplace_install_view.py +12 -35
  35. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/plugin_picker.py +19 -1
  36. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/tabs/discover_tab.py +170 -24
  37. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/tabs/installed_tab.py +7 -2
  38. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py +52 -6
  39. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/print_mode.py +40 -1
  40. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/resume_picker.py +13 -52
  41. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/resume_selector.py +6 -25
  42. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/side_install.py +17 -3
  43. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/skill_slash_input.py +28 -7
  44. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/status_bar.py +22 -8
  45. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/theme.py +42 -0
  46. comate_cli-0.12.6/comate_cli/terminal_agent/tip_highlight.py +65 -0
  47. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tips.py +37 -12
  48. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tool_approval_view.py +3 -1
  49. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tool_fold.py +31 -10
  50. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tool_result_formatters.py +15 -0
  51. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tool_view.py +4 -0
  52. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui.py +202 -63
  53. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/commands.py +259 -57
  54. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/history_sync.py +29 -7
  55. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/input_behavior.py +188 -38
  56. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/key_bindings.py +211 -1
  57. comate_cli-0.12.6/comate_cli/terminal_agent/tui_parts/mcp_auth_view.py +276 -0
  58. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/render_panels.py +72 -163
  59. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/shell_mode.py +6 -6
  60. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/ui_mode.py +5 -1
  61. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/update_check.py +422 -76
  62. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/update_messages.py +131 -0
  63. comate_cli-0.12.6/comate_cli/terminal_agent/workflows_menu.py +756 -0
  64. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/workflows_panel_model.py +16 -0
  65. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/pyproject.toml +2 -2
  66. comate_cli-0.12.6/tests/test_app_mcp_needs_auth_hint.py +80 -0
  67. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_print_mode.py +105 -0
  68. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_profile_threading.py +13 -2
  69. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_startup_latency.py +27 -0
  70. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_backend_feedback.py +3 -0
  71. comate_cli-0.12.6/tests/test_builtin_marketplaces.py +295 -0
  72. comate_cli-0.12.6/tests/test_clipboard_chip_restore.py +85 -0
  73. comate_cli-0.12.6/tests/test_clipboard_text.py +147 -0
  74. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_commands_system_messages.py +2 -0
  75. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_completion_status_panel.py +53 -0
  76. comate_cli-0.12.6/tests/test_context_view_tool_search.py +123 -0
  77. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_discover_tab.py +148 -4
  78. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_effort_style.py +54 -0
  79. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_jobs.py +57 -15
  80. comate_cli-0.12.6/tests/test_event_renderer_mcp_background.py +202 -0
  81. comate_cli-0.12.6/tests/test_event_renderer_oversized_tools.py +84 -0
  82. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_streaming.py +116 -0
  83. comate_cli-0.12.6/tests/test_event_renderer_tool_search_notice.py +46 -0
  84. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_exit_guard.py +23 -3
  85. comate_cli-0.12.6/tests/test_focus_events.py +35 -0
  86. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_history_drain_throttle.py +6 -6
  87. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_history_printer_log.py +57 -3
  88. comate_cli-0.12.6/tests/test_history_printer_styles.py +185 -0
  89. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_history_sync_tool_fold.py +79 -0
  90. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_i18n.py +84 -4
  91. comate_cli-0.12.6/tests/test_image_chip_deletion.py +208 -0
  92. comate_cli-0.12.6/tests/test_image_chips.py +365 -0
  93. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_installed_tab.py +50 -6
  94. comate_cli-0.12.6/tests/test_job_activity.py +107 -0
  95. comate_cli-0.12.6/tests/test_job_indicator.py +359 -0
  96. comate_cli-0.12.6/tests/test_job_indicator_host.py +449 -0
  97. comate_cli-0.12.6/tests/test_job_indicator_pty.py +142 -0
  98. comate_cli-0.12.6/tests/test_jobs_menu.py +1064 -0
  99. comate_cli-0.12.6/tests/test_jobs_menu_host.py +247 -0
  100. comate_cli-0.12.6/tests/test_jobs_menu_pty.py +126 -0
  101. comate_cli-0.12.6/tests/test_jobs_state.py +533 -0
  102. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_loading_tip_picker.py +40 -0
  103. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_logging_adapter.py +124 -0
  104. comate_cli-0.12.6/tests/test_loop_freeze_watchdog.py +188 -0
  105. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_marketplaces_tab.py +31 -3
  106. comate_cli-0.12.6/tests/test_mcp_auth_panel_pty.py +266 -0
  107. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_mcp_cli.py +207 -68
  108. comate_cli-0.12.6/tests/test_mcp_cli_auth.py +327 -0
  109. comate_cli-0.12.6/tests/test_mcp_jobs_pty.py +211 -0
  110. comate_cli-0.12.6/tests/test_mcp_panel_auth.py +460 -0
  111. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_mcp_serve.py +188 -0
  112. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_mcp_slash_command.py +58 -0
  113. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_menu_cursor_unification.py +2 -2
  114. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_menu_panel.py +60 -0
  115. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_modal_panel_visibility.py +10 -75
  116. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_plugin_slash_commands.py +9 -0
  117. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_plugin_tui_components.py +20 -0
  118. comate_cli-0.12.6/tests/test_print_mode_monitor_cap.py +222 -0
  119. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_resume_picker.py +53 -107
  120. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_resume_selector.py +47 -3
  121. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_side_install.py +59 -0
  122. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_skill_slash_input.py +33 -2
  123. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_status_bar.py +31 -0
  124. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_status_bar_transient.py +15 -0
  125. comate_cli-0.12.6/tests/test_tip_highlight.py +86 -0
  126. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tips.py +9 -8
  127. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_approval_view.py +45 -7
  128. comate_cli-0.12.6/tests/test_tui_image_chip_retention.py +608 -0
  129. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_image_paste.py +129 -8
  130. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_image_restore.py +12 -0
  131. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_image_submit.py +0 -28
  132. comate_cli-0.12.6/tests/test_tui_loading_tip_rotation.py +299 -0
  133. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_queue_pop_images.py +18 -0
  134. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_queue_sdk_source.py +4 -12
  135. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_scratchpad_fold_wiring.py +0 -1
  136. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_send_undo_window.py +0 -39
  137. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_tool_result_registry_lifecycle.py +0 -2
  138. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_ui_tick_exception_isolation.py +0 -1
  139. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_ultracode_keyword_submit.py +0 -1
  140. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_update_check.py +943 -6
  141. comate_cli-0.12.6/tests/test_workflows_menu.py +930 -0
  142. comate_cli-0.12.6/tests/test_workflows_menu_host.py +287 -0
  143. comate_cli-0.12.6/tests/test_workflows_menu_pty.py +168 -0
  144. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/uv.lock +3 -3
  145. comate_cli-0.12.4b13/.agent/artifacts/bash/3b0c312b1a234220818cb8cc15a12ea1565c69dc5f828351a492dab1add0cf84.txt +0 -5
  146. comate_cli-0.12.4b13/.agent/artifacts/bash/b0696d5d44fdde7597b8e9bd706d61237290ebca0c1c99273799393a7af99316.txt +0 -1
  147. comate_cli-0.12.4b13/.agent/artifacts/bash/e1164ab5f5f1e125db38bb44420532265c958f19533fbda8700db5a8aa4c3d68.txt +0 -1
  148. comate_cli-0.12.4b13/.agent/artifacts/grep_content/00f8013ce28fed8e3076db6490d6a3de8dbc1f57f5248a1f5e2710f11ab6849c.txt +0 -71
  149. comate_cli-0.12.4b13/.agent/artifacts/grep_content/0a5f3319bc1813a523b8d041831399f3ea694fcdb96f4b1df740300d08c60521.txt +0 -103
  150. comate_cli-0.12.4b13/.agent/artifacts/grep_content/17dc19a9b5faddcd056013e7783c8d23525d060b7b20a73ee241c569bedea6d8.txt +0 -143
  151. comate_cli-0.12.4b13/.agent/artifacts/grep_content/2b488f719c3431607773d9cebef4924ebfa33745adc68d8ee0f89596c608a218.txt +0 -78
  152. comate_cli-0.12.4b13/.agent/artifacts/grep_content/32ce175150a77180dda04a76ea66b9ee5b0c46ea0fd0842172bacece964d57a4.txt +0 -154
  153. comate_cli-0.12.4b13/.agent/artifacts/grep_content/43166c9eb998d1a426ce0c014348e39adc8c8e1d3d7a94ced4cc33ab268ecdeb.txt +0 -64
  154. comate_cli-0.12.4b13/.agent/artifacts/grep_content/4afc47414280761b7c94ff91f7477c4eb5602396da89303b403c6f3ef9535fd0.txt +0 -161
  155. comate_cli-0.12.4b13/.agent/artifacts/grep_content/56fca6c3112743a94cd0df58e04ee6dda31546ed53d50f8bf907dccb6f5329d3.txt +0 -81
  156. comate_cli-0.12.4b13/.agent/artifacts/grep_content/605fcb1ca26d1cb632e364dd044d280a12ad4f188db698d5bad57fe1ff556ce3.txt +0 -88
  157. comate_cli-0.12.4b13/.agent/artifacts/grep_content/6763a04477b314da76472e76696c8b03ee89fffc23ce74a22c634ea373840acd.txt +0 -60
  158. comate_cli-0.12.4b13/.agent/artifacts/grep_content/6d1856ff719ee695ed9205cf68723a263f8c70fe090295037c1c9a837f8eac13.txt +0 -78
  159. comate_cli-0.12.4b13/.agent/artifacts/grep_content/6e08c59431a214d8c3650a701cbaaf9125503d59d28476642f8b5a0ad6c8ed93.txt +0 -98
  160. comate_cli-0.12.4b13/.agent/artifacts/grep_content/746f6a3b34e30583972816a0052d99e8297096ba522d66027b085e3a0069b7db.txt +0 -69
  161. comate_cli-0.12.4b13/.agent/artifacts/grep_content/7c8fa2270ca7721e8619ba7eaec744100877330317dd5e8a1e42494a09579317.txt +0 -168
  162. comate_cli-0.12.4b13/.agent/artifacts/grep_content/7cc3e32a61277dc3e35039fdc1cac3691e147cd50d8d16fa75447de7d11abb77.txt +0 -36
  163. comate_cli-0.12.4b13/.agent/artifacts/grep_content/8203d4eaf35b0bb224cb12067e638b7f873ae0af05a590adedc02ae159a08099.txt +0 -210
  164. comate_cli-0.12.4b13/.agent/artifacts/grep_content/82a7ce335091c00f8aee0ff54b6a75ed25fb6f7a2f4bf8d29921c3f2704ada81.txt +0 -156
  165. comate_cli-0.12.4b13/.agent/artifacts/grep_content/82e9a29128ad224555ae0e85dddcc118d92a8f4faf4c8a3c3702c6b43dc71511.txt +0 -212
  166. comate_cli-0.12.4b13/.agent/artifacts/grep_content/83be41699a979e16de16f3095981346f337fda56a3c254420df953e2de87d982.txt +0 -6
  167. comate_cli-0.12.4b13/.agent/artifacts/grep_content/84074b6fda0e110d23094926c0d1846130be2b3870b1bcd5516243bae808b209.txt +0 -258
  168. comate_cli-0.12.4b13/.agent/artifacts/grep_content/a92368734a2d79c15eaba1c7d282bab2d4150ccde0e41e30628cfb6b7be6a678.txt +0 -76
  169. comate_cli-0.12.4b13/.agent/artifacts/grep_content/b02349374e026c124a60335b4b0e77698e4b7f8391f2466c827f6f80a8d596b2.txt +0 -239
  170. comate_cli-0.12.4b13/.agent/artifacts/grep_content/b41279d93d2b1f03e99bf2fdcd4477781edf3546256489e2d37f082fa414ef94.txt +0 -178
  171. comate_cli-0.12.4b13/.agent/artifacts/grep_content/bde0cfc02d38109cc02a28dd07611e464db9b47fef8b16fc25591866e5003316.txt +0 -87
  172. comate_cli-0.12.4b13/.agent/artifacts/grep_content/c0e234da2bfe338ffbce547372af90d36ce7580361b69664823d12fac048a86e.txt +0 -4
  173. comate_cli-0.12.4b13/.agent/artifacts/grep_content/c979b9589e166ae451c819fc8fc1efdf9eb042ce7af99e420a5b540f0d041a7a.txt +0 -305
  174. comate_cli-0.12.4b13/.agent/artifacts/grep_content/dd39676b55965a3e04c1b28c82cd9c15e335776f39f325f61854d3e48aa87859.txt +0 -8
  175. comate_cli-0.12.4b13/.agent/artifacts/grep_content/dec1ee9f38d117f649d0ba2cfb54b50d9ccd841833170c49614fa181a358013e.txt +0 -280
  176. comate_cli-0.12.4b13/.agent/artifacts/grep_content/eac0d88d65c24b10af556c030b795f3312cc70fc80f8f64575205ea1a6476264.txt +0 -223
  177. comate_cli-0.12.4b13/.agent/artifacts/grep_content/ef063804b585209aafbded7c27ad8d5eacbad17b3bb967022290a9efd01f6d13.txt +0 -182
  178. comate_cli-0.12.4b13/.agent/artifacts/grep_content/f75a98ad1ac3c085060f90492292060b3720dfa98c776e61a643b9824d1dc237.txt +0 -143
  179. comate_cli-0.12.4b13/.agent/artifacts/grep_content/faffcd8b4abd87e4abff3b72dcde673e844a4d7e230fbcc5c116ddd11815c37b.txt +0 -249
  180. comate_cli-0.12.4b13/.agent/artifacts/grep_content/fb29e07995891317ca0daa3257e541238908889bc7a68efeba695c8ac3a2db86.txt +0 -75
  181. comate_cli-0.12.4b13/.agent/artifacts/grep_content/feed470ec463825f43ae4e1b92a5996b1dbad91605fe491f39c9ee60879b7155.txt +0 -5
  182. comate_cli-0.12.4b13/.agent/artifacts/index.json +0 -442
  183. comate_cli-0.12.4b13/.agent/artifacts/ls/5a0a29a96857998fdfe5696c09b9c60027a6529e21108e22a20f5227afeddb59.json +0 -887
  184. comate_cli-0.12.4b13/.agent/artifacts/tool_result/1f093e98c0f4026921bb2df0c7c04d6b55b51ec40c9fbf38ba57bd387399127d.txt +0 -1591
  185. comate_cli-0.12.4b13/.agent/artifacts/tool_result/57c31009cc3665a6a672811ecf048cfb75ff7bae92598df943f492c53d39ca8e.txt +0 -16
  186. comate_cli-0.12.4b13/.agent/artifacts/tool_result/916a2e47f13fd22d3a73a4896c7a5edb3381b8a2c8322ce3ab8a4bf9da94c4a0.txt +0 -17
  187. comate_cli-0.12.4b13/.agent/artifacts/tool_result/91f5872f5b4b1b43f16589f7dd25e47236a805e848b37307cef464e881307fe1.txt +0 -909
  188. comate_cli-0.12.4b13/.agent/artifacts/tool_result/9871dc91ff9afef1303c74cf669996828a7db3dbff6c4c41fbac0a53fd7d195b.txt +0 -1766
  189. comate_cli-0.12.4b13/.agent/artifacts/tool_result/af594562a5579ffc9bef105dc77ed26408b2408447005046c9c6505541e2776a.txt +0 -16
  190. comate_cli-0.12.4b13/.agent/artifacts/tool_result/c52ec3da48b3a731ed42cc357258a4627d2d11fab5ef14d3050fd50e748151d4.txt +0 -1021
  191. comate_cli-0.12.4b13/.agent/artifacts/tool_result/f8c08a56feb0812b35a8e4b29a721d38c0aacd83ce3620c432d8b52114c14816.txt +0 -16
  192. comate_cli-0.12.4b13/.agent/artifacts/tool_result/fa30187a59d255f168806ee0de7a0a32b00535e53e7c5420aad1bac44b54a667.txt +0 -830
  193. comate_cli-0.12.4b13/comate_cli/terminal_agent/image_chips.py +0 -106
  194. comate_cli-0.12.4b13/comate_cli/terminal_agent/jobs_picker.py +0 -562
  195. comate_cli-0.12.4b13/comate_cli/terminal_agent/workflows_panel.py +0 -719
  196. comate_cli-0.12.4b13/tests/test_history_printer_styles.py +0 -146
  197. comate_cli-0.12.4b13/tests/test_image_chips.py +0 -173
  198. comate_cli-0.12.4b13/tests/test_jobs_panel.py +0 -1094
  199. comate_cli-0.12.4b13/tests/test_jobs_picker.py +0 -732
  200. comate_cli-0.12.4b13/tests/test_resume_picker_exit_safety.py +0 -70
  201. comate_cli-0.12.4b13/tests/test_tui_loading_tip_rotation.py +0 -171
  202. comate_cli-0.12.4b13/tests/test_workflows_panel.py +0 -769
  203. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/.agent/scheduled_prompts.json +0 -0
  204. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/.gitignore +0 -0
  205. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/__init__.py +0 -0
  206. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/__main__.py +0 -0
  207. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/device_identity.py +0 -0
  208. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/__init__.py +0 -0
  209. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/animations.py +0 -0
  210. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/approval_bridge.py +0 -0
  211. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/approval_content_preview.py +0 -0
  212. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/assistant_render.py +0 -0
  213. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/backend/__init__.py +0 -0
  214. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/backend/announcements.py +0 -0
  215. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/backend/client.py +0 -0
  216. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/backend/feedback.py +0 -0
  217. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/backend/provider_snapshot.py +0 -0
  218. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/backend/rating.py +0 -0
  219. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/backend/runtime.py +0 -0
  220. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/backend/session_report.py +0 -0
  221. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/backend/session_title.py +0 -0
  222. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/backend/tasks.py +0 -0
  223. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/bash_command_display.py +0 -0
  224. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/builtin_commands/.keep +0 -0
  225. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/builtin_commands/commit.md +0 -0
  226. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/builtin_commands/implement-plan.md +0 -0
  227. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/builtin_commands/learn.md +0 -0
  228. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/builtin_commands/open-pr.md +0 -0
  229. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/clipboard_image.py +0 -0
  230. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/codenames.py +0 -0
  231. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/config/__init__.py +0 -0
  232. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/config/edit_session.py +0 -0
  233. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/config/model.py +0 -0
  234. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/config/picker.py +0 -0
  235. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/config/picker_state.py +0 -0
  236. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/config/store.py +0 -0
  237. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/config_check.py +0 -0
  238. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/console_profile.py +0 -0
  239. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/custom_slash_commands.py +0 -0
  240. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/effort_menu.py +0 -0
  241. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/effort_ruler.py +0 -0
  242. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/env_utils.py +0 -0
  243. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/error_display.py +0 -0
  244. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/exit_confirm_view.py +0 -0
  245. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/exit_watchdog.py +0 -0
  246. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/file_ref_hint.py +0 -0
  247. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/fragment_utils.py +0 -0
  248. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/goal_edit_view.py +0 -0
  249. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/goal_resume_view.py +0 -0
  250. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/i18n/__init__.py +0 -0
  251. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/input_geometry.py +0 -0
  252. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/layout_coordinator.py +0 -0
  253. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/locale.py +0 -0
  254. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/logging_file_handler.py +0 -0
  255. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/logo.py +0 -0
  256. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/markdown_render.py +0 -0
  257. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/mention_completer.py +0 -0
  258. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/model_tier_style.py +0 -0
  259. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/output_style_menu.py +0 -0
  260. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/__init__.py +0 -0
  261. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/auto_update_runner.py +0 -0
  262. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/auto_update_store.py +0 -0
  263. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/components/__init__.py +0 -0
  264. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/components/detail_view.py +0 -0
  265. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/components/plugin_list.py +0 -0
  266. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/components/search_box.py +0 -0
  267. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/components/tab_bar.py +0 -0
  268. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/operation_state.py +0 -0
  269. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/tabs/__init__.py +0 -0
  270. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/plugins/tabs/errors_tab.py +0 -0
  271. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/preflight.py +0 -0
  272. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/preflight_wizard.py +0 -0
  273. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/preflight_wizard_ui.py +0 -0
  274. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/question_broker.py +0 -0
  275. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/question_view.py +0 -0
  276. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/recap/__init__.py +0 -0
  277. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/recap/controller.py +0 -0
  278. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/resume_preview.py +0 -0
  279. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/rpc_commands.py +0 -0
  280. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/rpc_relay.py +0 -0
  281. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/rpc_stdio.py +0 -0
  282. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/rpc_ws.py +0 -0
  283. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/scm_request_status.py +0 -0
  284. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/selection_menu.py +0 -0
  285. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/sigint_guard.py +0 -0
  286. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/skills_menu.py +0 -0
  287. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/slash_commands.py +0 -0
  288. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/startup.py +0 -0
  289. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/startup_profile.py +0 -0
  290. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/statusline/__init__.py +0 -0
  291. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/statusline/model.py +0 -0
  292. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/statusline/picker.py +0 -0
  293. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/statusline/picker_state.py +0 -0
  294. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/statusline/store.py +0 -0
  295. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/stream_pacer.py +0 -0
  296. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/suggestion/__init__.py +0 -0
  297. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/suggestion/controller.py +0 -0
  298. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/synchronized_output.py +0 -0
  299. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/text_effects.py +0 -0
  300. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tool_fold_view.py +0 -0
  301. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tool_result_state.py +0 -0
  302. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tool_result_store.py +0 -0
  303. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tool_result_viewer.py +0 -0
  304. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/transcript_viewer.py +0 -0
  305. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/__init__.py +0 -0
  306. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/approval_queue.py +0 -0
  307. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/btw_view.py +0 -0
  308. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/mcp_connecting_view.py +0 -0
  309. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/resize_guard.py +0 -0
  310. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/run_clock.py +0 -0
  311. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/tui_parts/slash_command_registry.py +0 -0
  312. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_agent/ultracode_keyword.py +0 -0
  313. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/terminal_title.py +0 -0
  314. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/comate_cli/update_cli.py +0 -0
  315. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/docs/cli-rpc-stdio-guide.md +0 -0
  316. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/docs/release-notes/0.12.3.md +0 -0
  317. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/docs/startup-performance.md +0 -0
  318. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/docs/superpowers/plans/2026-07-07-tui-first-repaint-before-sdk-submit.md +0 -0
  319. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/docs/superpowers/plans/2026-07-07-windows-update-manual-rollback.md +0 -0
  320. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/_fake_anthropic_server.py +0 -0
  321. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/_rpc_ws_client.py +0 -0
  322. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/config/__init__.py +0 -0
  323. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/config/test_config_exit.py +0 -0
  324. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/config/test_edit_session.py +0 -0
  325. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/config/test_model.py +0 -0
  326. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/config/test_picker_state.py +0 -0
  327. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/config/test_picker_ui.py +0 -0
  328. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/config/test_roundtrip.py +0 -0
  329. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/config/test_runtime_settings.py +0 -0
  330. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/config/test_skills_denylist_migration.py +0 -0
  331. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/config/test_store_load.py +0 -0
  332. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/config/test_store_save.py +0 -0
  333. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/conftest.py +0 -0
  334. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/fixtures/exit_watchdog_child.py +0 -0
  335. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/fixtures/fake_mcp_misbehaving_stdout.py +0 -0
  336. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/recap/test_idle_recap_controller.py +0 -0
  337. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/recap/test_recap_history_rendering.py +0 -0
  338. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/recap/test_tui_idle_recap_integration.py +0 -0
  339. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/statusline/__init__.py +0 -0
  340. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/statusline/test_model.py +0 -0
  341. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/statusline/test_picker_state.py +0 -0
  342. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/statusline/test_store.py +0 -0
  343. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/suggestion/test_next_step_suggestion_controller.py +0 -0
  344. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/suggestion/test_next_step_suggestion_render.py +0 -0
  345. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/suggestion/test_tab_accepts_next_step_suggestion.py +0 -0
  346. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/suggestion/test_tui_next_step_suggestion_integration.py +0 -0
  347. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_animations_styles.py +0 -0
  348. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_animator_shuffle.py +0 -0
  349. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_config_check_gate.py +0 -0
  350. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_exit_lifecycle.py +0 -0
  351. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_mcp_preload.py +0 -0
  352. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_mcp_preload_kick.py +0 -0
  353. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_preflight_gate.py +0 -0
  354. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_pty_ctrl_b.py +0 -0
  355. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_pty_ctrl_c_exit.py +0 -0
  356. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_pty_shell_mode.py +0 -0
  357. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_pty_smoke.py +0 -0
  358. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_shutdown.py +0 -0
  359. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_startup_order.py +0 -0
  360. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_token_cost_config.py +0 -0
  361. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_app_usage_line.py +0 -0
  362. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_approval_bridge.py +0 -0
  363. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_approval_content_preview.py +0 -0
  364. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_backend_announcements.py +0 -0
  365. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_backend_client.py +0 -0
  366. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_backend_provider_snapshot.py +0 -0
  367. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_backend_rating.py +0 -0
  368. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_backend_session_report.py +0 -0
  369. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_backend_tasks.py +0 -0
  370. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_btw_slash_command.py +0 -0
  371. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_busy_slash_gating.py +0 -0
  372. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_cli_project_root.py +0 -0
  373. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_clipboard_image_reader.py +0 -0
  374. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_compact_command_semantics.py +0 -0
  375. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_completion_context_activation.py +0 -0
  376. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_config_check.py +0 -0
  377. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_console_profile.py +0 -0
  378. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_context_command.py +0 -0
  379. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_context_view.py +0 -0
  380. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_ctrl_b_background.py +0 -0
  381. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_ctrl_c_clear_input.py +0 -0
  382. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_custom_slash_commands.py +0 -0
  383. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_device_identity.py +0 -0
  384. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_distribution_contract.py +0 -0
  385. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_drain_frame_atomicity.py +0 -0
  386. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_effort_menu.py +0 -0
  387. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_effort_menu_frame_rate.py +0 -0
  388. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_effort_ruler.py +0 -0
  389. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_effort_slash_command.py +0 -0
  390. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_errors_tab.py +0 -0
  391. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer.py +0 -0
  392. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_approval_wait.py +0 -0
  393. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_boundary.py +0 -0
  394. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_budget_floor.py +0 -0
  395. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_e2e.py +0 -0
  396. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_fixed_overhead.py +0 -0
  397. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_idle_prune.py +0 -0
  398. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_log_boundary.py +0 -0
  399. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_log_queue.py +0 -0
  400. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_provider_overflow.py +0 -0
  401. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_shell.py +0 -0
  402. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_stream_pacing.py +0 -0
  403. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_stream_staging.py +0 -0
  404. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_tool_args_progress.py +0 -0
  405. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_event_renderer_tool_fold.py +0 -0
  406. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_exit_confirm_view.py +0 -0
  407. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_exit_watchdog.py +0 -0
  408. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_exit_watchdog_subprocess.py +0 -0
  409. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_file_ref_hint.py +0 -0
  410. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_format_error.py +0 -0
  411. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_goal_edit_handlers.py +0 -0
  412. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_goal_edit_view.py +0 -0
  413. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_goal_paused_hint.py +0 -0
  414. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_goal_resume_tui.py +0 -0
  415. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_goal_resume_view.py +0 -0
  416. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_goal_slash_command.py +0 -0
  417. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_handle_error.py +0 -0
  418. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_history_printer.py +0 -0
  419. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_history_printer_subtitle_position.py +0 -0
  420. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_history_printer_tool_fold.py +0 -0
  421. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_history_sync.py +0 -0
  422. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_image_preprocess_offload_lag.py +0 -0
  423. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_import_weight.py +0 -0
  424. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_input_behavior.py +0 -0
  425. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_input_history.py +0 -0
  426. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_input_separator_counter.py +0 -0
  427. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_interrupt_exit_semantics.py +0 -0
  428. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_key_bindings_system_messages.py +0 -0
  429. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_layout_coordinator.py +0 -0
  430. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_loading_line_fragments.py +0 -0
  431. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_loading_modal_suppression.py +0 -0
  432. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_logging_file_handler.py +0 -0
  433. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_logo.py +0 -0
  434. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_main_args.py +0 -0
  435. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_main_args_yolo.py +0 -0
  436. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_main_profile_entry.py +0 -0
  437. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_markdown_render.py +0 -0
  438. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_marketplace_add_commands.py +0 -0
  439. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_marketplace_install_view.py +0 -0
  440. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_mcp_cli_scope_defaults.py +0 -0
  441. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_mention_completer.py +0 -0
  442. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_menu_panel_pty.py +0 -0
  443. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_message_style.py +0 -0
  444. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_modal_freeze_timing.py +0 -0
  445. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_model_switch_command.py +0 -0
  446. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_model_tier_style.py +0 -0
  447. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_no_raw_colors.py +0 -0
  448. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_output_style_slash_command.py +0 -0
  449. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_permission_mode_cycle.py +0 -0
  450. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_plugin_auto_update_runner.py +0 -0
  451. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_plugin_auto_update_store.py +0 -0
  452. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_plugin_auto_update_tui.py +0 -0
  453. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_plugin_operation_state.py +0 -0
  454. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_preflight.py +0 -0
  455. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_preflight_copilot.py +0 -0
  456. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_preflight_wizard_ui.py +0 -0
  457. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_pty_output_integrity.py +0 -0
  458. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_question_broker.py +0 -0
  459. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_question_key_bindings.py +0 -0
  460. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_question_view.py +0 -0
  461. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_resize_guard.py +0 -0
  462. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_resume_preview.py +0 -0
  463. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_rewind_command_semantics.py +0 -0
  464. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_rpc_mode_logging.py +0 -0
  465. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_rpc_relay_dial_out.py +0 -0
  466. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_rpc_relay_e2e_smoke.py +0 -0
  467. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_rpc_relay_process_smoke.py +0 -0
  468. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_rpc_v4_stdio_smoke.py +0 -0
  469. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_rpc_v4_ws_smoke.py +0 -0
  470. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_rpc_ws_bind_failure.py +0 -0
  471. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_run_clock.py +0 -0
  472. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_running_tool_status_line.py +0 -0
  473. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_scm_request_status.py +0 -0
  474. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_scrollback_write_encoding.py +0 -0
  475. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_selection_menu.py +0 -0
  476. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_session_auto_title.py +0 -0
  477. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_session_query_token_summary.py +0 -0
  478. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_settings_write_guard.py +0 -0
  479. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_shell_mode.py +0 -0
  480. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_shutdown_noise_guard.py +0 -0
  481. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_shutdown_noise_integration.py +0 -0
  482. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_sigint_guard.py +0 -0
  483. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_sigint_key_binding.py +0 -0
  484. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_skills_slash_command.py +0 -0
  485. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_slash_add_dir.py +0 -0
  486. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_slash_argument_hint.py +0 -0
  487. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_slash_clear.py +0 -0
  488. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_slash_completer.py +0 -0
  489. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_slash_registry.py +0 -0
  490. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_startup_import_budget.py +0 -0
  491. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_startup_profile.py +0 -0
  492. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_status_bar_mid_turn_refresh.py +0 -0
  493. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_status_bar_request_status.py +0 -0
  494. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_stream_pacer.py +0 -0
  495. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_stream_pacing_tick.py +0 -0
  496. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_stream_staging_panel.py +0 -0
  497. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_style_class_coverage.py +0 -0
  498. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_synchronized_output.py +0 -0
  499. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tab_title.py +0 -0
  500. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_task_panel_format.py +0 -0
  501. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_task_panel_key_bindings.py +0 -0
  502. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_task_panel_rendering.py +0 -0
  503. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_task_poll.py +0 -0
  504. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_terminal_title.py +0 -0
  505. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_theme.py +0 -0
  506. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_todo_panel_busy_gating.py +0 -0
  507. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_approval_key_bindings.py +0 -0
  508. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_approval_tui.py +0 -0
  509. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_approval_view_workflow.py +0 -0
  510. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_call_protection.py +0 -0
  511. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_fold.py +0 -0
  512. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_fold_panel.py +0 -0
  513. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_fold_view.py +0 -0
  514. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_result_formatters.py +0 -0
  515. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_result_state.py +0 -0
  516. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_result_store.py +0 -0
  517. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_result_viewer.py +0 -0
  518. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_result_viewer_key_bindings.py +0 -0
  519. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_view.py +0 -0
  520. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tool_view_styles.py +0 -0
  521. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_transcript_viewer.py +0 -0
  522. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_transcript_viewer_record_matching.py +0 -0
  523. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_transcript_viewer_tool_fold.py +0 -0
  524. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_builtin_slash_chain.py +0 -0
  525. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_deferred_prewarm.py +0 -0
  526. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_elapsed_status.py +0 -0
  527. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_esc_queue.py +0 -0
  528. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_exit_idempotence.py +0 -0
  529. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_exit_paced_tail.py +0 -0
  530. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_exit_pending_logs.py +0 -0
  531. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_hot_reload.py +0 -0
  532. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_image_chip_seed.py +0 -0
  533. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_image_path_upgrade.py +0 -0
  534. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_interrupt_queue_recall.py +0 -0
  535. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_llm_retry_panel.py +0 -0
  536. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_local_interactive_barrier.py +0 -0
  537. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_mcp_init_gate.py +0 -0
  538. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_paste_history_persistence.py +0 -0
  539. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_paste_newline_guard.py +0 -0
  540. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_paste_placeholder.py +0 -0
  541. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_plugin_load.py +0 -0
  542. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_provider_error_shield.py +0 -0
  543. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_queue_preview.py +0 -0
  544. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_replace_session_resume_hint.py +0 -0
  545. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_scheduled_fire_log.py +0 -0
  546. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_session_observers.py +0 -0
  547. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_shutdown_cancel_propagation.py +0 -0
  548. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_split_invariance.py +0 -0
  549. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_startup_latency.py +0 -0
  550. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_surrogate_repair.py +0 -0
  551. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_thinking_display.py +0 -0
  552. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_tui_window_too_small_fallback.py +0 -0
  553. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_ui_mode_derivation.py +0 -0
  554. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_ultracode_keyword.py +0 -0
  555. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_ultracode_keyword_frame_rate.py +0 -0
  556. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_ultracode_shimmer_render.py +0 -0
  557. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_update_cli.py +0 -0
  558. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_upstream_surrogate_merge_characterization.py +0 -0
  559. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_usage_command.py +0 -0
  560. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_wellformed_terminal_input.py +0 -0
  561. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_whitelabel_clear_logo.py +0 -0
  562. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_windows_sigint_console.py +0 -0
  563. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_workflows_panel_model.py +0 -0
  564. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_wrap_user_text.py +0 -0
  565. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tests/test_zipapp_launcher_path.py +0 -0
  566. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tools/diagnose_windows_shim_rename.py +0 -0
  567. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tools/logo_lab.py +0 -0
  568. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tools/nico_preview.py +0 -0
  569. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tools/probe_conhost_char_width.py +0 -0
  570. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tools/probe_conhost_render_replay.py +0 -0
  571. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tools/startup_bench.py +0 -0
  572. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tools/transcript_viewer_bench.py +0 -0
  573. {comate_cli-0.12.4b13 → comate_cli-0.12.6}/tools/verify_windows_self_update_semantics.py +0 -0
@@ -0,0 +1 @@
1
+ 3.12
@@ -4,6 +4,11 @@
4
4
 
5
5
  ### Added
6
6
 
7
+ - Interpreter Migration(macOS/Linux):CLI 不在 Python 3.12 上、并且没有待更新的新版本时,第一次启动在界面之前显示一行提示,之后的启动显示全屏提示,只有「立即迁移」和「跳过」。「立即迁移」把**当前版本**(`<包名>==<当前版本>`,带发行版的安装参数)用 `--python 3.12` 重装,成功后提示重启,本次启动停止;失败只显示一行原因(uv 输出的最后一行),继续在当前 Python 上进入界面。「跳过」不记住,下次启动再问。已经在 3.12、editable 安装、PATH 里没有 uv、Windows 都不提示;有待更新的新版本时只显示更新提示(接受更新会顺带迁移到 3.12)。文案四种语言齐全。
8
+ - 白牌 Python 下载镜像:发行版 profile 的 `UpdateSource` 新增可选字段 `python_install_mirror`。设置后,CLI 运行的 uv 安装命令(macOS/Linux 的 Self-Update 与 Interpreter Migration、Windows 旁装)在子进程环境里设 `UV_PYTHON_INSTALL_MIRROR` 为这个值,不看 locale,并且盖过简中用户的 npmmirror;用户自己设置的 `UV_PYTHON_INSTALL_MIRROR` 仍然优先。Windows 降级给出手动命令时,命令上方多出 PowerShell 与 CMD 两种设置镜像的写法,命令本身不变;文案四种语言齐全。公网 comate 不设置这个字段,行为不变(ADR 0056)。
9
+ - Event loop 冻结看门狗:界面动画 / 计时停住超过 2 秒时,独立线程把主线程当时的调用栈连同最近的首轮阶段名、busy / staging / 动画状态写进 `~/.comate/logs/agent.log`(WARNING),同一次冻结在 2 秒、5 秒、15 秒各记一次;默认开启,设 `COMATE_TUI_LOOP_WATCHDOG=0` 关闭。原有的「TUI event loop lag detected」日志现在带阶段名,且空闲态(无请求、无动画)的停顿超过 2 秒也记一条 INFO,不再静默(阈值 `AGENT_SDK_TUI_EVENT_LOOP_IDLE_LAG_THRESHOLD_S`)。此前冻结日志只能说明停了多久,说不出停在哪,多次 3–37 秒冻结因此无法归因。
10
+ - 思考时长:隐藏 thinking 时,一段思考正常结束后,loading 行括号里的呼吸黄 badge 换成静态暗灰的时长短语,显示 3 秒后消失。短语与 badge 逐档对应:`thought for 8s with high effort`(max / xhigh / high 同句式)、`ultra thought for 8s`、`thought for 8s`(medium / 无生效档)、`thought briefly for 8s`(low);60 秒及以上显示 `1m 5s`。不足 1 秒、中断、stream 重试、思考中途打开 thinking 显示、turn 结束时都不显示。固定英文,不随界面语言变化;不写 scrollback。
11
+ - MCP 工具搜索(SDK):MCP 工具很多时,工具 schema 改为按需加载——模型先只看到工具名清单,需要时调用内置 `ToolSearch` 加载,下一步才能调用该工具。默认 `auto`(延迟候选 schema ≥ 生效窗口 10% 且数量 ≥ 30 时启用),可用环境变量 `COMATE_AGENT_SDK_TOOL_SEARCH`(`auto` / `auto:P` / `auto:P:C` / `on` / `off`)调整。首次启用时终端提示一次;`/context` 拆分显示 MCP 工具与已加载 / 延迟候选数;单个 MCP 工具定义超过窗口 5% 时启动后警告。comate-cli 与 comate-rpc 的 `comate-agent-sdk` 下限抬到 0.12.20(SDK 同步升版,新事件 `ToolSearchEnabledEvent`)。
7
12
  - 规则双目录(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
13
  - 技能扫描根加入 `.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
14
  - 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 会忽略这个字段并加载全部工具。
@@ -68,6 +73,9 @@
68
73
 
69
74
  ### Changed
70
75
 
76
+ - Self-Update 固定到 Python 3.12:`comate update`、启动时的「立即更新」、Windows 旁装,以及 Windows 自动路径不可用时显示的手动修复命令,都让新版本装在 Python 3.12 上(uv 命令带 `--python 3.12`;机器上没有 3.12 时 uv 会自动下载)。原因:uv 在读包之前就选好解释器,并且忽略 `requires-python` 的上限,所以以前用户会跑在 3.11 / 3.13 / 3.14 等不同版本上,而且不带 `--python` 的重装会把已经在 3.12 上的环境换成别的版本。白牌发行版在 `install_args` 里自己指定了 `--python` 时,以白牌的为准。`requires-python` 不变,3.11–3.13 继续支持。决策见 ADR 0055。
77
+ - 简中用户更新时,uv 需要下载的 Python 改走国内镜像(npmmirror 的 python-build-standalone),不再依赖 GitHub;进程内重装和 Windows 旁装都生效。你自己设置了 `UV_PYTHON_INSTALL_MIRROR` 时以你的为准;其他语言环境不变。
78
+ - resume 选择器的预览键由 Ctrl+V 改为 Ctrl+A:VS Code、Windows Terminal 等终端把 Ctrl+V 截成粘贴,按下后剪贴板文本会落进搜索框,进不了预览。搜索模式下也可以按 Ctrl+A 预览,Esc 或再按 Ctrl+A 关闭后回到搜索框,搜索词保持不变;代价是搜索框内 Ctrl+A 不再移到行首。
71
79
  - 0.12.4 测试版里的随包 `/pr`(别名 `/mr`)改名为 `/open-pr`(别名 `/open-mr`),功能不变。原因:`pr` 是常见的第三方 skill 名,旧名会挡住用户自己装的同名 skill。`/pr`、`/mr` 不再有效,也没有改名提示。
72
80
  - 用户装的 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
81
  - 思考被折叠时,loading 行括号里的呼吸黄短语不再随机挑,改为按这次请求真实生效的思考档位挑词:ultracode → `ultra thinking`、max / xhigh / high → `thinking some more with <档位> effort`(如 `thinking some more with high effort`)、medium → `thinking`、low → `light thinking`;auto 且模型无默认档、模型不支持调档、off 时显示 `thinking`,不再出现低档却显示 `ultra thinking` 的情况。档位取端点降档后的实际值(与 statusline 一致),每次请求开始思考时读一次,一轮中途开 ultracode 后下一次请求即生效。颜色、位置、出现时机不变;短语在中文 / 日文界面下也保持英文。
@@ -91,6 +99,10 @@
91
99
 
92
100
  ### Fixed
93
101
 
102
+ - 切换窗口后运行中的任务被中断、输入框多出 `[O[I`:终端开着焦点上报(DECSET 1004,
103
+ 例如 Windows PowerShell 经 ssh 连到远程服务器)时,窗口失焦 / 得焦会发 `ESC[O` / `ESC[I`。
104
+ prompt_toolkit 不认识这两条序列,把它们拆成 Esc 加两个普通字符,Esc 就中断了本轮。
105
+ 现在这两条序列被整段忽略,主界面与所有弹窗都不再被切窗口误触发;真按 Esc 照常中断。
94
106
  - `comate update` 在依赖包刚发布时解析失败:更新命令只刷新 CLI 自身的索引缓存,
95
107
  依赖(如 `comate-agent-sdk`)仍用旧缓存,uv 报 `No solution found`。macOS/Linux
96
108
  进程内更新与 Windows 分阶段安装现在都改用 `uv tool install --refresh`,刷新全部
@@ -5,13 +5,33 @@ Canonical language for Comate CLI command discovery, slash input completion, men
5
5
  ## Menu Panel Language
6
6
 
7
7
  **Menu Panel(菜单面板)**:
8
- 由 slash 命令打开的暂态操作界面。多个菜单使用一致的视觉与导航规则,关闭后返回对话输入。Menu Panel 打开期间,Status Bar 不显示。
9
- _Avoid_: menu output(菜单输出), history block(历史块)
8
+ 由 slash 命令或 Job Indicator 打开的暂态操作界面,嵌在底部交互带里,不切换屏幕。多个菜单使用一致的视觉与导航规则,关闭后返回对话输入。Menu Panel 打开期间,Status Bar 不显示。
9
+ _Avoid_: menu output(菜单输出), history block(历史块), 全屏 picker(会话内面板不再使用全屏界面)
10
10
 
11
11
  **Status Bar(状态栏)**:
12
- 底部交互带最下方的一行。左列显示 Transient Status Message,没有消息时显示权限模式提示;右列显示会话信息(模型、分支、上下文余量等)。Menu Panel 打开期间隐藏;工具审批、向用户提问、退出确认不属于 Menu Panel,不隐藏它。
12
+ 底部交互带最下方的一行。左列显示 Transient Status Message,没有消息时显示权限模式提示和 Job Indicator;右列显示会话信息(模型、分支、上下文余量等)。用户可以把键盘焦点从输入框移到 Status Bar,在 Job Indicator 之间选择。Menu Panel 打开期间隐藏;工具审批、向用户提问、退出确认不属于 Menu Panel,不隐藏它。
13
13
  _Avoid_: footer(Menu Panel 自己有页脚), bottom toolbar(prompt_toolkit 的术语,本项目不使用), 补全状态行(与 Status Bar 共用同一个位置,但是另一个东西)
14
14
 
15
+ **Job Indicator(后台任务指示)**:
16
+ Status Bar 左列里按类别显示的后台 job 数量,例如 `2 agents`、`1 shell`、`1 workflow`、`1 MCP call`。类别:agents(agent job)、shells(bash 与 monitor job)、workflows(workflow job)、mcp(MCP 后台调用)。只统计仍在运行或待命的 job;数量为 0 的类别不显示。选中一个 Job Indicator 并确认,会打开该类别的菜单。它取代了输入框上方常驻的 jobs 面板。
17
+ _Avoid_: pill(口头说法), jobs 面板(已删除的旧区域), 后台任务栏
18
+
19
+ **Jobs Menu(后台任务菜单)**:
20
+ 列出本会话后台 job 的 Menu Panel,可以查看 job 详情和停止 job。从 Job Indicator 打开时只列该类别的 job;从 `/ps` 打开时列出全部类别。workflow 类别打开的是 workflows 菜单,不是 Jobs Menu。
21
+ _Avoid_: ps picker, jobs picker(已删除的全屏版本)
22
+
23
+ **Job Activity(job 活动)**:
24
+ 后台 agent job 最近一次工具调用的单行英文描述,例如 `Running tasklist …`、`Reading identity.py`。工具开始时出现,显示到该 job 的 turn 结束为止;工具执行完、模型思考期间仍显示上一个工具。固定英文,不跟随界面语言。
25
+ _Avoid_: current tool line(SDK 里的原始字符串 `Tool(k=v…)`,是另一个东西), 工具行
26
+
27
+ **MCP 进度行(MCP Progress Line)**:
28
+ 下游 MCP server 推送的最近一条进度文字,SDK 把它清洗成一行。前台调用时显示在折叠容器的嵌套行里,后台调用时显示在 Jobs Menu 的行里。内容来自外部 server,什么语言都可能。
29
+ _Avoid_: Job Activity(那是 agent job 的工具调用描述,由 CLI 生成,固定英文)
30
+
31
+ **Job 结算行(Job Settlement Line)**:
32
+ 后台 job 结算(进入 idle 或终态)时写入 scrollback 的一条记录:首行是身份和状态,⎿ 副行是指标和结果。每种 kind 有自己的模板。固定英文,不跟随界面语言。
33
+ _Avoid_: 完成行(它也用于 idle、stopped、dismissed), 终态行(idle 不是终态), job_event(代码里的 entry 类型名)
34
+
15
35
  **Settings Edit Session(设置编辑会话)**:
16
36
  从打开设置面板到保留或取消更改的一次编辑过程。更改即时保存;保留操作接受这些更改,取消操作撤销本次仍未被外部再次修改的更改。
17
37
  _Avoid_: settings draft(设置草稿), save-on-close(关闭时才保存)
@@ -81,9 +101,13 @@ The display-only cadence at which complete assistant text lines leave the line-s
81
101
  _Avoid_: typewriter effect (that is character-level), throttling (that is the scrollback drain), rate limiting
82
102
 
83
103
  **Thinking Badge**:
84
- 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.
104
+ 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. When the thinking ends normally, a Thought Duration takes its place.
85
105
  _Avoid_: effort badge, hidden thinking label, random thinking word
86
106
 
107
+ **Thought Duration**:
108
+ The past-tense counterpart of the Thinking Badge: a short English phrase such as `thought for 8s with high effort` that takes the badge's place in the loading line's status suffix for 3 seconds after a hidden thinking ends normally (at a text or tool call boundary). Each effort level's phrase mirrors that level's badge, and the level is the one frozen when the badge was chosen. The time runs from the request's first thinking delta to that boundary, in whole seconds. It appears only for a thinking that stayed hidden from start to end and lasted at least 1 second; an interrupt, a stream retry, turning thinking display on, or the end of the turn leaves none. It is static faint text, not breathing yellow, because the thinking is over. It never goes to scrollback.
109
+ _Avoid_: thinking time, thinking timer, elapsed thinking badge
110
+
87
111
  **Tool Args Progress**:
88
112
  The `↓ N tokens` part of the loading line's status suffix: an estimate of how large the arguments of the tool call the model is still generating have grown so far. It appears only after the arguments pass a visibility threshold, and it can only move when the provider delivers the arguments incrementally; a provider that delivers them in one piece at the end leaves nothing to show. It concerns the main agent's in-flight request only.
89
113
  _Avoid_: token 下行状态 (reads as network bytes), download progress, output token counter
@@ -170,6 +194,10 @@ _Avoid_: marketplace url (too narrow), repo (only one of the forms)
170
194
  A registered plugin source, named by its own manifest rather than by whatever the user typed. One Marketplace Source resolves to at most one Marketplace, however it is spelled.
171
195
  _Avoid_: plugin store, registry (the registry is the collection of Marketplaces)
172
196
 
197
+ **Effective Installation**:
198
+ An installed-plugin record that applies to the current project: either a user-scope record, or a local-scope record whose project path is the current project. A local-scope record for another project is not an Effective Installation here, even though it exists in the registry.
199
+ _Avoid_: installed (ambiguous: the registry may hold records that do not apply here), known plugin
200
+
173
201
  ## CLI Self-Update Language
174
202
 
175
203
  **Self-Update**:
@@ -196,6 +224,10 @@ _Avoid_: symlink swap, shim update, rename dance
196
224
  The rule that a completed Self-Update takes effect only for processes started afterwards. Running sessions keep their version until they exit.
197
225
  _Avoid_: hot upgrade, live upgrade
198
226
 
227
+ **Interpreter Migration**:
228
+ Reinstalling the *same* installed CLI version onto the target Python runtime (3.12, ADR 0055), offered at launch on macOS/Linux when the CLI runs on another interpreter and no newer version is pending. It is not a Self-Update (the version does not change), but it obeys Restart-to-Apply and reuses the in-process reinstall path. It always needs the user's confirmation in the launch prompt, because rebuilding the tool environment can break other running sessions.
229
+ _Avoid_: runtime upgrade, Python update, re-pin
230
+
199
231
  ## Tool Result Display Language
200
232
 
201
233
  **Tool Result Preview**:
@@ -228,6 +260,32 @@ _Avoid_: discard input (the pre-existing lossy clear), undo (there is no in-plac
228
260
  A short-lived hint occupying the status bar's left column, dismissed by timeout or the next real keypress, whichever comes first. It is interaction feedback, not history: it never enters scrollback.
229
261
  _Avoid_: toast, notification, system message (that is the scrollback form)
230
262
 
263
+ **Loading Tip**:
264
+ The single faint line under the loading spinner while a turn runs (`Tip: …`). Normal tips rotate through a shuffled static pool. A tip changes after 12 s of total on-screen time, or, once it has been on screen for 1 s in total, while it is hidden (for example, while a tool runs), so each gap between tool calls shows a different tip. A one-shot tip tells the user about a state the system already handled (for example, MCP tools now load on demand): it jumps the queue once, counts only after it is actually rendered, and never comes back. No Loading Tip enters scrollback (ADR 0052).
265
+ _Avoid_: hint (overloaded with Transient Status Message), system message (that is the scrollback form)
266
+
267
+ **System Message**:
268
+ A scrollback entry that comes from the CLI or the SDK, not from the model or a tool, with a severity of info, warning, or error. Warnings that SDK or CLI code logs and the CLI forwards into scrollback are System Messages too.
269
+ _Avoid_: log line, notice (as user-facing words)
270
+
271
+ ## Image Chip Language
272
+
273
+ **Image Chip(图片 chip)**:
274
+ 输入框中代表一张已粘贴图片的字面量 `[Pasted image #k: label]`。它是图片在草稿里的唯一可见形式;编号 `k` 只在输入框内对齐图片,与模型看到的 `[Image #N]` 无关。
275
+ _Avoid_: image placeholder(与长文本折叠占位符 `[Pasted Content N chars]` 混淆), 图片占位符
276
+
277
+ **Chip Ledger(chip 账本)**:
278
+ 当前草稿中 chip 编号到图片数据的映射。提交时只有字面量仍在文本中的账本条目会随消息发出。
279
+ _Avoid_: image map, 图片缓存
280
+
281
+ **Orphan Chip(孤儿 chip)**:
282
+ 仍在 Chip Ledger 中、但字面量已不在输入框文本里的图片。提交时它被丢弃。
283
+ _Avoid_: dropped placeholder, 丢失的占位符
284
+
285
+ **Dead Chip Literal(失效 chip 字面量)**:
286
+ 格式与 Image Chip 相同、但 Chip Ledger 中没有对应图片的文本,常见于召回的输入历史。它只是文字,不代表图片。
287
+ _Avoid_: 历史图片, stale chip
288
+
231
289
  ## Terminal Tab Language
232
290
 
233
291
  **Session Title**:
@@ -325,10 +383,13 @@ _Avoid_: lag log, profiler output (the profiler records phase durations, not a s
325
383
 
326
384
  - A **Marketplace** takes its name from its manifest, never from the **Marketplace Source** the user typed; duplicate detection therefore compares resolved sources, not names or spellings.
327
385
  - Adding a **Marketplace** is never silent: the user confirms the **Marketplace Source** once before any clone or download starts, whether the source was typed into the panel or prefilled from a slash command argument.
386
+ - Every plugin panel that reports "installed" (a checkmark, a count, a list of installed plugins) means **Effective Installation** for the current project, and uses the same rule the plugin loader uses to decide what to load. Registry membership alone never counts as installed.
387
+ - Manual plugin update and **Plugin Auto Update** act on a plugin key, not on an **Effective Installation**: every record under that key (the user-scope record and every project's local-scope record) moves to the same version together. Display is per project; update is per plugin. There is no per-project version.
328
388
 
329
389
  - **Self-Update** and **Plugin Auto Update** are separate concepts with separate vocabularies: a **Version Check** orders versions, plugin **Update Detection** only compares for equality. Neither triggers the other.
330
390
  - A **Side-Install** followed by an **Entrypoint Flip** is one Self-Update strategy; an in-process reinstall of the current installation is another. Which one applies is a property of the platform, not of the user's choice.
331
391
  - **Restart-to-Apply** holds for every Self-Update strategy and mirrors the plugin **Update Effectiveness Boundary**: on-disk state changes, the running process does not.
392
+ - **Interpreter Migration** and **Self-Update** both rebuild the installation on the target Python, but only a Self-Update changes the version. A pending Self-Update takes priority: accepting it completes the migration as a side effect, so the launch never offers both before the TUI starts. (The background Version Check can still add an update hint inside the TUI after a migration hint or prompt; the next launch then offers only the update.) Windows has no Interpreter Migration (a Side-Install of the same version is treated as already staged); Windows users reach the target Python through their next Self-Update.
332
393
 
333
394
  - A **Session Title** is a fact of the session, not of the **Session Report**: it exists whether or not a report backend is configured, and the report only mirrors it. **Durable Title Completion** is therefore judged from the session's own metadata.
334
395
  - A **Session Title** is generated from the session's earliest **Committed Title Input**, never from the latest one. A resumed session without a title is titled from its original first input, so the title does not change to whatever was typed after resume.
@@ -349,6 +410,10 @@ _Avoid_: lag log, profiler output (the profiler records phase durations, not a s
349
410
  - 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.
350
411
  - Running tools are not a **Stall Status**: the running-tool list and the **Task List Panel** may share the screen.
351
412
 
413
+ - No submit path destroys an **Image Chip** it cannot use: a **Core Slash Command**, a **Custom Command**, a **Skill Slash Command**, a feedback draft, or a rejected submit leaves the unused chips and their **Chip Ledger** entries in the input box. Only a plain user message carries images to the model.
414
+ - `!` shell mode never accepts an **Image Chip**: an image paste is refused, and a pasted image path stays plain text.
415
+ - An **Orphan Chip** comes only from the user changing the input text (editing, or recalling input history over the draft); the CLI never creates one by itself. A **Dead Chip Literal** never looks like an **Image Chip** in the input box.
416
+
352
417
  ## Flagged ambiguities
353
418
 
354
419
  - 代码里的 `_menu_panel_active()` 实际含义是“使用共享 `MenuPanel` 外壳”,不含 `/statusline`、marketplace 安装、`/goal edit`,因此与本术语表的 **Menu Panel**(slash 命令打开的暂态操作界面)并不等价。判断 **Status Bar** 是否隐藏另用独立集合,不复用它。
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: comate-cli
3
- Version: 0.12.4b13
3
+ Version: 0.12.6
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
18
+ Requires-Dist: comate-agent-sdk<0.13,>=0.12.23
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
@@ -45,6 +45,19 @@ uv tool install comate-cli
45
45
  comate
46
46
  ```
47
47
 
48
+ ## 内置 Marketplace 扩展
49
+
50
+ 发行版可通过 `DistributionProfile.builtin_marketplaces` 提供
51
+ `BuiltinMarketplace(name=展示名称, source=HTTP清单地址)`。
52
+ 默认值为空;Comate 不预置任何源。
53
+
54
+ 用户打开 `/plugin` 后,Discover 直接加载内置清单并展示插件。浏览不会注册源;
55
+ 确认插件安装后,程序保存来源信息,复用已有的安装和更新流程。
56
+ 内置源在 Marketplaces 中始终可见,不提供删除、隐藏或禁用操作。
57
+ 清单请求失败时可在 Discover 选择重试,其他来源仍可浏览。
58
+
59
+ 当前内置清单支持 HTTP/HTTPS manifest URL。Git 源仍可通过原有手动添加流程使用。
60
+
48
61
  ## MCP
49
62
 
50
63
  `comate mcp` supports Claude Code compatible MCP configuration commands for common add/list/get/remove flows.
@@ -15,6 +15,19 @@ uv tool install comate-cli
15
15
  comate
16
16
  ```
17
17
 
18
+ ## 内置 Marketplace 扩展
19
+
20
+ 发行版可通过 `DistributionProfile.builtin_marketplaces` 提供
21
+ `BuiltinMarketplace(name=展示名称, source=HTTP清单地址)`。
22
+ 默认值为空;Comate 不预置任何源。
23
+
24
+ 用户打开 `/plugin` 后,Discover 直接加载内置清单并展示插件。浏览不会注册源;
25
+ 确认插件安装后,程序保存来源信息,复用已有的安装和更新流程。
26
+ 内置源在 Marketplaces 中始终可见,不提供删除、隐藏或禁用操作。
27
+ 清单请求失败时可在 Discover 选择重试,其他来源仍可浏览。
28
+
29
+ 当前内置清单支持 HTTP/HTTPS manifest URL。Git 源仍可通过原有手动添加流程使用。
30
+
18
31
  ## MCP
19
32
 
20
33
  `comate mcp` supports Claude Code compatible MCP configuration commands for common add/list/get/remove flows.
@@ -0,0 +1,41 @@
1
+ 2026-11-02 12:52:02,880 platform=Linux-7.0.0-30-generic-x86_64-with-glibc2.43 python=3.13.18 psutil=7.2.2
2
+ 2026-11-02 12:52:02,880 bash=/bin/bash cwd=/tmp/claude-1000/-home-andy-works-agent-sdk/81e18132-c517-4c2e-a0a5-45ee51dd802e/scratchpad output_dir=/tmp/claude-1000/-home-andy-works-agent-sdk/81e18132-c517-4c2e-a0a5-45ee51dd802e/scratchpad/.agent/artifacts/bash runs=1
3
+ 2026-11-02 12:52:02,881 process count=393
4
+ 2026-11-02 12:52:02,881 step 列:loop = 在 event loop 线程同步执行(生产现状);thread = 在 daemon 线程执行(候选修法)
5
+ 2026-11-02 12:52:02,911 run=1 loop script mkstemp+write+close duration_ms= 0.1 loop_max_gap_ms= 10.3 result=.tmp_bash_script_s89rx0gd.sh
6
+ 2026-11-02 12:52:02,943 run=1 loop output mkstemp duration_ms= 0.1 loop_max_gap_ms= 10.3 result=.tmp_bash_pt593nyv.txt
7
+ 2026-11-02 12:52:02,973 run=1 loop cwd mkstemp duration_ms= 0.1 loop_max_gap_ms= 10.2 result=.tmp_bash_cwd_zr16nfyp.txt
8
+ 2026-11-02 12:52:02,996 run=1 thread command run (spawn+exit, thread) duration_ms= 21.9 loop_max_gap_ms= 11.6 result=exit=0 pump_alive=False
9
+ 2026-11-02 12:52:03,027 run=1 loop exited root: psutil.Process(pid) duration_ms= 0.3 loop_max_gap_ms= 10.3 NoSuchProcess: process PID not found (pid=96922)
10
+ 2026-11-02 12:52:03,059 run=1 loop exited root: children(recursive=True) duration_ms= 0.0 loop_max_gap_ms= 10.4 result=skipped: root process already gone
11
+ 2026-11-02 12:52:03,090 run=1 loop exited root: kill() duration_ms= 0.0 loop_max_gap_ms= 10.4 result=skipped: root process already gone
12
+ 2026-11-02 12:52:03,141 run=1 loop exited root: _ppid_map() duration_ms= 19.3 loop_max_gap_ms= 19.3 result=dict[393]
13
+ 2026-11-02 12:52:03,195 run=1 thread exited root: psutil.Process(pid) duration_ms= 0.3 loop_max_gap_ms= 10.3 NoSuchProcess: process PID not found (pid=96927)
14
+ 2026-11-02 12:52:03,227 run=1 thread exited root: children(recursive=True) duration_ms= 0.4 loop_max_gap_ms= 10.6 result=skipped: root process already gone
15
+ 2026-11-02 12:52:03,259 run=1 thread exited root: kill() duration_ms= 0.8 loop_max_gap_ms= 10.6 result=skipped: root process already gone
16
+ 2026-11-02 12:52:03,310 run=1 thread exited root: _ppid_map() duration_ms= 19.9 loop_max_gap_ms= 10.5 result=dict[393]
17
+ 2026-11-02 12:52:03,645 run=1 loop live root: psutil.Process(pid) duration_ms= 0.3 loop_max_gap_ms= 10.4 result=96936
18
+ 2026-11-02 12:52:03,684 run=1 loop live root: children(recursive=True) duration_ms= 7.5 loop_max_gap_ms= 10.4 result=list[0]
19
+ 2026-11-02 12:52:03,715 run=1 loop live root: kill() duration_ms= 0.1 loop_max_gap_ms= 10.3 result=1
20
+ 2026-11-02 12:52:03,756 run=1 loop live root: _ppid_map() duration_ms= 9.1 loop_max_gap_ms= 10.5 result=dict[394]
21
+ 2026-11-02 12:52:03,788 run=1 loop unlink x3 duration_ms= 0.1 loop_max_gap_ms= 10.3 result=3
22
+ 2026-11-02 12:52:03,788 ---- summary (max over 1 runs) ----
23
+ 2026-11-02 12:52:03,789 loop exited root: _ppid_map() median_ms= 19.3 max_ms= 19.3 loop_max_gap_ms= 19.3
24
+ 2026-11-02 12:52:03,789 thread command run (spawn+exit, thread) median_ms= 21.9 max_ms= 21.9 loop_max_gap_ms= 11.6
25
+ 2026-11-02 12:52:03,789 thread exited root: children(recursive=True) median_ms= 0.4 max_ms= 0.4 loop_max_gap_ms= 10.6
26
+ 2026-11-02 12:52:03,789 thread exited root: kill() median_ms= 0.8 max_ms= 0.8 loop_max_gap_ms= 10.6
27
+ 2026-11-02 12:52:03,789 thread exited root: _ppid_map() median_ms= 19.9 max_ms= 19.9 loop_max_gap_ms= 10.5
28
+ 2026-11-02 12:52:03,789 loop live root: _ppid_map() median_ms= 9.1 max_ms= 9.1 loop_max_gap_ms= 10.5
29
+ 2026-11-02 12:52:03,790 loop exited root: children(recursive=True) median_ms= 0.0 max_ms= 0.0 loop_max_gap_ms= 10.4
30
+ 2026-11-02 12:52:03,790 loop exited root: kill() median_ms= 0.0 max_ms= 0.0 loop_max_gap_ms= 10.4
31
+ 2026-11-02 12:52:03,790 loop live root: psutil.Process(pid) median_ms= 0.3 max_ms= 0.3 loop_max_gap_ms= 10.4
32
+ 2026-11-02 12:52:03,790 loop live root: children(recursive=True) median_ms= 7.5 max_ms= 7.5 loop_max_gap_ms= 10.4
33
+ 2026-11-02 12:52:03,790 loop script mkstemp+write+close median_ms= 0.1 max_ms= 0.1 loop_max_gap_ms= 10.3
34
+ 2026-11-02 12:52:03,790 loop output mkstemp median_ms= 0.1 max_ms= 0.1 loop_max_gap_ms= 10.3
35
+ 2026-11-02 12:52:03,790 loop exited root: psutil.Process(pid) median_ms= 0.3 max_ms= 0.3 loop_max_gap_ms= 10.3
36
+ 2026-11-02 12:52:03,790 thread exited root: psutil.Process(pid) median_ms= 0.3 max_ms= 0.3 loop_max_gap_ms= 10.3
37
+ 2026-11-02 12:52:03,791 loop live root: kill() median_ms= 0.1 max_ms= 0.1 loop_max_gap_ms= 10.3
38
+ 2026-11-02 12:52:03,791 loop unlink x3 median_ms= 0.1 max_ms= 0.1 loop_max_gap_ms= 10.3
39
+ 2026-11-02 12:52:03,791 loop cwd mkstemp median_ms= 0.1 max_ms= 0.1 loop_max_gap_ms= 10.2
40
+ 2026-11-02 12:52:03,794 log: /home/andy/works/agent-sdk/packages/comate_cli/bash_settle_diag.log
41
+ 2026-11-02 12:52:03,794 json: /home/andy/works/agent-sdk/packages/comate_cli/bash_settle_diag.json
@@ -38,6 +38,8 @@ class UpdateSource:
38
38
  fetch_latest: LatestVersionFetcher
39
39
  install_args: tuple[str, ...] = ()
40
40
  release_notes_url: str | None = None
41
+ # Python 下载镜像(UV_PYTHON_INSTALL_MIRROR),盖过简中 locale 的 npmmirror(ADR 0056)。
42
+ python_install_mirror: str | None = None
41
43
 
42
44
  def __post_init__(self) -> None:
43
45
  if not callable(self.fetch_latest):
@@ -136,6 +138,25 @@ class BackendServices:
136
138
  object.__setattr__(self, "headers", dict(self.headers or {}))
137
139
 
138
140
 
141
+ @dataclass(frozen=True, slots=True)
142
+ class BuiltinMarketplace:
143
+ """发行版内置的 HTTP marketplace 清单;用户无需手动添加。"""
144
+
145
+ name: str
146
+ source: str
147
+
148
+ def __post_init__(self) -> None:
149
+ from comate_agent_sdk.plugins.marketplace_source import parse_marketplace_source
150
+
151
+ if not self.name.strip():
152
+ raise ValueError("BuiltinMarketplace.name must be non-empty")
153
+ source = parse_marketplace_source(self.source)
154
+ if source.source != "url":
155
+ raise ValueError("BuiltinMarketplace.source must be an HTTP manifest URL")
156
+ object.__setattr__(self, "name", self.name.strip())
157
+ object.__setattr__(self, "source", self.source.strip())
158
+
159
+
139
160
  @dataclass(frozen=True, slots=True)
140
161
  class DistributionProfile:
141
162
  product_name: str = "Comate"
@@ -157,11 +178,19 @@ class DistributionProfile:
157
178
  # None = 尾注不带链接 / trailer 不带邮箱;settings `scm.attribution=false` 可整体关闭。
158
179
  product_url: str | None = None
159
180
  attribution_email: str | None = None
181
+ builtin_marketplaces: tuple[BuiltinMarketplace, ...] = ()
160
182
 
161
183
  def __post_init__(self) -> None:
162
184
  for field_name in ("product_name", "command_name", "package_name"):
163
185
  if not str(getattr(self, field_name)).strip():
164
186
  raise ValueError(f"DistributionProfile.{field_name} must be non-empty")
187
+ object.__setattr__(self, "builtin_marketplaces", tuple(self.builtin_marketplaces))
188
+ for field_name in ("name", "source"):
189
+ values = [getattr(item, field_name) for item in self.builtin_marketplaces]
190
+ if len(values) != len(set(values)):
191
+ raise ValueError(
192
+ f"DistributionProfile.builtin_marketplaces has duplicate {field_name}"
193
+ )
165
194
  if self.ultracode_notice is not None:
166
195
  normalized = str(self.ultracode_notice).strip()
167
196
  if not normalized:
@@ -841,6 +841,11 @@ def main(argv: list[str] | None = None, *, profile=None) -> None:
841
841
  sys.stderr.write(f"{exc}\n")
842
842
  raise SystemExit(exc.exit_code) from exc
843
843
 
844
+ # 放在 --version / update / mcp 之后:这几条路径不起 TUI,不付 prompt_toolkit 导入开销。
845
+ from comate_cli.terminal_agent import focus_events
846
+
847
+ focus_events.install()
848
+
844
849
  noise_guard = _ShutdownNoiseGuard()
845
850
  noise_guard.install()
846
851
 
@@ -882,6 +887,8 @@ def main(argv: list[str] | None = None, *, profile=None) -> None:
882
887
  sys.stderr.write("Error: -p requires a prompt argument or stdin input\n")
883
888
  raise SystemExit(1)
884
889
  print_message = "\n\n".join(parts)
890
+ # 无人值守监视的默认费用护栏;用户配置仍可在 agent 构建时覆盖。
891
+ os.environ.setdefault("COMATE_MONITOR_MAX_TIMEOUT_MS", "600000")
885
892
 
886
893
  interactive = not rpc_mode and print_message is None
887
894
  if interactive: