comate-cli 0.12.4b2__tar.gz → 0.12.4b3__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 (502) hide show
  1. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/CHANGELOG.md +4 -0
  2. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/PKG-INFO +2 -2
  3. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/main.py +20 -6
  4. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/app.py +3 -2
  5. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/rpc_relay.py +13 -1
  6. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/render_panels.py +1 -1
  7. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/docs/cli-rpc-stdio-guide.md +119 -43
  8. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/pyproject.toml +2 -2
  9. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_main_args.py +19 -3
  10. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_rpc_mode_logging.py +1 -1
  11. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_rpc_relay_dial_out.py +53 -6
  12. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/uv.lock +2 -2
  13. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/bash/3b0c312b1a234220818cb8cc15a12ea1565c69dc5f828351a492dab1add0cf84.txt +0 -0
  14. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/bash/b0696d5d44fdde7597b8e9bd706d61237290ebca0c1c99273799393a7af99316.txt +0 -0
  15. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/bash/e1164ab5f5f1e125db38bb44420532265c958f19533fbda8700db5a8aa4c3d68.txt +0 -0
  16. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/00f8013ce28fed8e3076db6490d6a3de8dbc1f57f5248a1f5e2710f11ab6849c.txt +0 -0
  17. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/0a5f3319bc1813a523b8d041831399f3ea694fcdb96f4b1df740300d08c60521.txt +0 -0
  18. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/17dc19a9b5faddcd056013e7783c8d23525d060b7b20a73ee241c569bedea6d8.txt +0 -0
  19. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/2b488f719c3431607773d9cebef4924ebfa33745adc68d8ee0f89596c608a218.txt +0 -0
  20. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/32ce175150a77180dda04a76ea66b9ee5b0c46ea0fd0842172bacece964d57a4.txt +0 -0
  21. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/43166c9eb998d1a426ce0c014348e39adc8c8e1d3d7a94ced4cc33ab268ecdeb.txt +0 -0
  22. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/4afc47414280761b7c94ff91f7477c4eb5602396da89303b403c6f3ef9535fd0.txt +0 -0
  23. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/56fca6c3112743a94cd0df58e04ee6dda31546ed53d50f8bf907dccb6f5329d3.txt +0 -0
  24. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/605fcb1ca26d1cb632e364dd044d280a12ad4f188db698d5bad57fe1ff556ce3.txt +0 -0
  25. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/6763a04477b314da76472e76696c8b03ee89fffc23ce74a22c634ea373840acd.txt +0 -0
  26. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/6d1856ff719ee695ed9205cf68723a263f8c70fe090295037c1c9a837f8eac13.txt +0 -0
  27. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/6e08c59431a214d8c3650a701cbaaf9125503d59d28476642f8b5a0ad6c8ed93.txt +0 -0
  28. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/746f6a3b34e30583972816a0052d99e8297096ba522d66027b085e3a0069b7db.txt +0 -0
  29. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/7c8fa2270ca7721e8619ba7eaec744100877330317dd5e8a1e42494a09579317.txt +0 -0
  30. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/7cc3e32a61277dc3e35039fdc1cac3691e147cd50d8d16fa75447de7d11abb77.txt +0 -0
  31. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/8203d4eaf35b0bb224cb12067e638b7f873ae0af05a590adedc02ae159a08099.txt +0 -0
  32. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/82a7ce335091c00f8aee0ff54b6a75ed25fb6f7a2f4bf8d29921c3f2704ada81.txt +0 -0
  33. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/82e9a29128ad224555ae0e85dddcc118d92a8f4faf4c8a3c3702c6b43dc71511.txt +0 -0
  34. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/83be41699a979e16de16f3095981346f337fda56a3c254420df953e2de87d982.txt +0 -0
  35. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/84074b6fda0e110d23094926c0d1846130be2b3870b1bcd5516243bae808b209.txt +0 -0
  36. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/a92368734a2d79c15eaba1c7d282bab2d4150ccde0e41e30628cfb6b7be6a678.txt +0 -0
  37. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/b02349374e026c124a60335b4b0e77698e4b7f8391f2466c827f6f80a8d596b2.txt +0 -0
  38. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/b41279d93d2b1f03e99bf2fdcd4477781edf3546256489e2d37f082fa414ef94.txt +0 -0
  39. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/bde0cfc02d38109cc02a28dd07611e464db9b47fef8b16fc25591866e5003316.txt +0 -0
  40. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/c0e234da2bfe338ffbce547372af90d36ce7580361b69664823d12fac048a86e.txt +0 -0
  41. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/c979b9589e166ae451c819fc8fc1efdf9eb042ce7af99e420a5b540f0d041a7a.txt +0 -0
  42. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/dd39676b55965a3e04c1b28c82cd9c15e335776f39f325f61854d3e48aa87859.txt +0 -0
  43. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/eac0d88d65c24b10af556c030b795f3312cc70fc80f8f64575205ea1a6476264.txt +0 -0
  44. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/ef063804b585209aafbded7c27ad8d5eacbad17b3bb967022290a9efd01f6d13.txt +0 -0
  45. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/f75a98ad1ac3c085060f90492292060b3720dfa98c776e61a643b9824d1dc237.txt +0 -0
  46. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/faffcd8b4abd87e4abff3b72dcde673e844a4d7e230fbcc5c116ddd11815c37b.txt +0 -0
  47. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/fb29e07995891317ca0daa3257e541238908889bc7a68efeba695c8ac3a2db86.txt +0 -0
  48. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/grep_content/feed470ec463825f43ae4e1b92a5996b1dbad91605fe491f39c9ee60879b7155.txt +0 -0
  49. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/index.json +0 -0
  50. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/ls/5a0a29a96857998fdfe5696c09b9c60027a6529e21108e22a20f5227afeddb59.json +0 -0
  51. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/tool_result/1f093e98c0f4026921bb2df0c7c04d6b55b51ec40c9fbf38ba57bd387399127d.txt +0 -0
  52. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/tool_result/57c31009cc3665a6a672811ecf048cfb75ff7bae92598df943f492c53d39ca8e.txt +0 -0
  53. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/tool_result/916a2e47f13fd22d3a73a4896c7a5edb3381b8a2c8322ce3ab8a4bf9da94c4a0.txt +0 -0
  54. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/tool_result/91f5872f5b4b1b43f16589f7dd25e47236a805e848b37307cef464e881307fe1.txt +0 -0
  55. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/tool_result/9871dc91ff9afef1303c74cf669996828a7db3dbff6c4c41fbac0a53fd7d195b.txt +0 -0
  56. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/tool_result/af594562a5579ffc9bef105dc77ed26408b2408447005046c9c6505541e2776a.txt +0 -0
  57. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/tool_result/c52ec3da48b3a731ed42cc357258a4627d2d11fab5ef14d3050fd50e748151d4.txt +0 -0
  58. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/tool_result/f8c08a56feb0812b35a8e4b29a721d38c0aacd83ce3620c432d8b52114c14816.txt +0 -0
  59. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/artifacts/tool_result/fa30187a59d255f168806ee0de7a0a32b00535e53e7c5420aad1bac44b54a667.txt +0 -0
  60. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.agent/scheduled_prompts.json +0 -0
  61. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/.gitignore +0 -0
  62. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/CONTEXT.md +0 -0
  63. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/README.md +0 -0
  64. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/__init__.py +0 -0
  65. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/__main__.py +0 -0
  66. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/device_identity.py +0 -0
  67. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/distribution.py +0 -0
  68. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/mcp_cli.py +0 -0
  69. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/__init__.py +0 -0
  70. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/animations.py +0 -0
  71. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/approval_bridge.py +0 -0
  72. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/approval_content_preview.py +0 -0
  73. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/assistant_render.py +0 -0
  74. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/backend/__init__.py +0 -0
  75. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/backend/announcements.py +0 -0
  76. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/backend/client.py +0 -0
  77. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/backend/feedback.py +0 -0
  78. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/backend/provider_snapshot.py +0 -0
  79. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/backend/rating.py +0 -0
  80. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/backend/runtime.py +0 -0
  81. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/backend/session_report.py +0 -0
  82. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/backend/session_title.py +0 -0
  83. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/backend/tasks.py +0 -0
  84. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/bash_command_display.py +0 -0
  85. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/builtin_commands/.keep +0 -0
  86. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/builtin_commands/commit.md +0 -0
  87. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/builtin_commands/implement-plan.md +0 -0
  88. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/builtin_commands/learn.md +0 -0
  89. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/builtin_commands/pr.md +0 -0
  90. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/clipboard_image.py +0 -0
  91. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/codenames.py +0 -0
  92. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/config/__init__.py +0 -0
  93. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/config/model.py +0 -0
  94. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/config/picker.py +0 -0
  95. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/config/picker_state.py +0 -0
  96. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/config/store.py +0 -0
  97. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/config_check.py +0 -0
  98. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/console_profile.py +0 -0
  99. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/context_view.py +0 -0
  100. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/custom_slash_commands.py +0 -0
  101. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/effort_menu.py +0 -0
  102. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/effort_ruler.py +0 -0
  103. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/effort_style.py +0 -0
  104. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/env_utils.py +0 -0
  105. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/error_display.py +0 -0
  106. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/event_renderer.py +0 -0
  107. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/exit_confirm_view.py +0 -0
  108. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/exit_watchdog.py +0 -0
  109. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/figures.py +0 -0
  110. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/file_ref_hint.py +0 -0
  111. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/fragment_utils.py +0 -0
  112. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/goal_edit_view.py +0 -0
  113. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/goal_resume_view.py +0 -0
  114. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/history_printer.py +0 -0
  115. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/i18n/__init__.py +0 -0
  116. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/i18n/_en.py +0 -0
  117. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/i18n/_ja.py +0 -0
  118. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/i18n/_zh.py +0 -0
  119. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/i18n/message.py +0 -0
  120. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/image_chips.py +0 -0
  121. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/input_geometry.py +0 -0
  122. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/jobs_picker.py +0 -0
  123. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/jobs_state.py +0 -0
  124. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/layout_coordinator.py +0 -0
  125. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/locale.py +0 -0
  126. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/logging_adapter.py +0 -0
  127. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/logging_file_handler.py +0 -0
  128. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/logo.py +0 -0
  129. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/markdown_render.py +0 -0
  130. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/mcp_serve.py +0 -0
  131. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/mention_completer.py +0 -0
  132. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/message_style.py +0 -0
  133. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/model_tier_style.py +0 -0
  134. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/models.py +0 -0
  135. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/output_style_menu.py +0 -0
  136. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/__init__.py +0 -0
  137. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/auto_update_runner.py +0 -0
  138. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/auto_update_store.py +0 -0
  139. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/components/__init__.py +0 -0
  140. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/components/detail_view.py +0 -0
  141. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/components/plugin_list.py +0 -0
  142. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/components/search_box.py +0 -0
  143. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/components/tab_bar.py +0 -0
  144. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/marketplace_install_view.py +0 -0
  145. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/operation_state.py +0 -0
  146. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/plugin_picker.py +0 -0
  147. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/tabs/__init__.py +0 -0
  148. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/tabs/discover_tab.py +0 -0
  149. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/tabs/errors_tab.py +0 -0
  150. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/tabs/installed_tab.py +0 -0
  151. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py +0 -0
  152. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/preflight.py +0 -0
  153. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/preflight_wizard.py +0 -0
  154. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/preflight_wizard_ui.py +0 -0
  155. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/print_mode.py +0 -0
  156. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/question_broker.py +0 -0
  157. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/question_view.py +0 -0
  158. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/recap/__init__.py +0 -0
  159. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/recap/controller.py +0 -0
  160. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/resume_picker.py +0 -0
  161. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/resume_preview.py +0 -0
  162. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/resume_selector.py +0 -0
  163. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/rpc_commands.py +0 -0
  164. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/rpc_stdio.py +0 -0
  165. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/rpc_ws.py +0 -0
  166. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/scm_request_status.py +0 -0
  167. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/selection_menu.py +0 -0
  168. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/side_install.py +0 -0
  169. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/sigint_guard.py +0 -0
  170. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/skill_slash_input.py +0 -0
  171. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/skills_menu.py +0 -0
  172. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/slash_commands.py +0 -0
  173. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/startup.py +0 -0
  174. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/startup_profile.py +0 -0
  175. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/status_bar.py +0 -0
  176. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/statusline/__init__.py +0 -0
  177. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/statusline/model.py +0 -0
  178. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/statusline/picker.py +0 -0
  179. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/statusline/picker_state.py +0 -0
  180. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/statusline/store.py +0 -0
  181. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/stream_pacer.py +0 -0
  182. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/synchronized_output.py +0 -0
  183. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/text_effects.py +0 -0
  184. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/theme.py +0 -0
  185. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tips.py +0 -0
  186. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tool_approval_view.py +0 -0
  187. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tool_fold.py +0 -0
  188. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tool_fold_view.py +0 -0
  189. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tool_result_formatters.py +0 -0
  190. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tool_result_state.py +0 -0
  191. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tool_result_store.py +0 -0
  192. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tool_result_viewer.py +0 -0
  193. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tool_view.py +0 -0
  194. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/transcript_viewer.py +0 -0
  195. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui.py +0 -0
  196. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/__init__.py +0 -0
  197. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/approval_queue.py +0 -0
  198. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/btw_view.py +0 -0
  199. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/commands.py +0 -0
  200. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/history_sync.py +0 -0
  201. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/input_behavior.py +0 -0
  202. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/key_bindings.py +0 -0
  203. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/mcp_connecting_view.py +0 -0
  204. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/resize_guard.py +0 -0
  205. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/run_clock.py +0 -0
  206. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/shell_mode.py +0 -0
  207. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/slash_command_registry.py +0 -0
  208. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/tui_parts/ui_mode.py +0 -0
  209. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/ultracode_keyword.py +0 -0
  210. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/update_check.py +0 -0
  211. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/update_messages.py +0 -0
  212. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/workflows_panel.py +0 -0
  213. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_agent/workflows_panel_model.py +0 -0
  214. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/terminal_title.py +0 -0
  215. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/comate_cli/update_cli.py +0 -0
  216. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/docs/release-notes/0.12.3.md +0 -0
  217. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/docs/startup-performance.md +0 -0
  218. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/docs/superpowers/plans/2026-07-07-tui-first-repaint-before-sdk-submit.md +0 -0
  219. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/docs/superpowers/plans/2026-07-07-windows-update-manual-rollback.md +0 -0
  220. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/_fake_anthropic_server.py +0 -0
  221. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/_rpc_ws_client.py +0 -0
  222. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/config/__init__.py +0 -0
  223. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/config/test_model.py +0 -0
  224. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/config/test_picker_state.py +0 -0
  225. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/config/test_picker_ui.py +0 -0
  226. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/config/test_roundtrip.py +0 -0
  227. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/config/test_skills_denylist_migration.py +0 -0
  228. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/config/test_store_load.py +0 -0
  229. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/config/test_store_save.py +0 -0
  230. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/conftest.py +0 -0
  231. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/fixtures/exit_watchdog_child.py +0 -0
  232. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/fixtures/fake_mcp_misbehaving_stdout.py +0 -0
  233. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/recap/test_idle_recap_controller.py +0 -0
  234. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/recap/test_recap_history_rendering.py +0 -0
  235. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/recap/test_tui_idle_recap_integration.py +0 -0
  236. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/statusline/__init__.py +0 -0
  237. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/statusline/test_model.py +0 -0
  238. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/statusline/test_picker_state.py +0 -0
  239. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/statusline/test_store.py +0 -0
  240. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_animations_styles.py +0 -0
  241. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_animator_shuffle.py +0 -0
  242. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_config_check_gate.py +0 -0
  243. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_exit_lifecycle.py +0 -0
  244. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_mcp_preload.py +0 -0
  245. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_mcp_preload_kick.py +0 -0
  246. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_preflight_gate.py +0 -0
  247. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_print_mode.py +0 -0
  248. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_profile_threading.py +0 -0
  249. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_pty_ctrl_b.py +0 -0
  250. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_pty_ctrl_c_exit.py +0 -0
  251. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_pty_shell_mode.py +0 -0
  252. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_pty_smoke.py +0 -0
  253. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_shutdown.py +0 -0
  254. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_startup_latency.py +0 -0
  255. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_startup_order.py +0 -0
  256. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_token_cost_config.py +0 -0
  257. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_app_usage_line.py +0 -0
  258. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_approval_bridge.py +0 -0
  259. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_approval_content_preview.py +0 -0
  260. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_backend_announcements.py +0 -0
  261. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_backend_client.py +0 -0
  262. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_backend_feedback.py +0 -0
  263. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_backend_provider_snapshot.py +0 -0
  264. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_backend_rating.py +0 -0
  265. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_backend_session_report.py +0 -0
  266. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_backend_tasks.py +0 -0
  267. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_btw_slash_command.py +0 -0
  268. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_busy_slash_gating.py +0 -0
  269. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_cli_project_root.py +0 -0
  270. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_clipboard_image_reader.py +0 -0
  271. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_commands_system_messages.py +0 -0
  272. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_compact_command_semantics.py +0 -0
  273. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_completion_context_activation.py +0 -0
  274. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_completion_status_panel.py +0 -0
  275. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_config_check.py +0 -0
  276. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_console_profile.py +0 -0
  277. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_context_command.py +0 -0
  278. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_context_view.py +0 -0
  279. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_ctrl_b_background.py +0 -0
  280. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_ctrl_c_clear_input.py +0 -0
  281. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_custom_slash_commands.py +0 -0
  282. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_device_identity.py +0 -0
  283. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_discover_tab.py +0 -0
  284. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_distribution_contract.py +0 -0
  285. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_drain_frame_atomicity.py +0 -0
  286. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_effort_menu.py +0 -0
  287. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_effort_menu_frame_rate.py +0 -0
  288. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_effort_ruler.py +0 -0
  289. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_effort_slash_command.py +0 -0
  290. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_effort_style.py +0 -0
  291. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_errors_tab.py +0 -0
  292. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer.py +0 -0
  293. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_approval_wait.py +0 -0
  294. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_boundary.py +0 -0
  295. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_e2e.py +0 -0
  296. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_jobs.py +0 -0
  297. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_log_boundary.py +0 -0
  298. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_log_queue.py +0 -0
  299. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_shell.py +0 -0
  300. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_stream_pacing.py +0 -0
  301. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_stream_staging.py +0 -0
  302. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_streaming.py +0 -0
  303. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_tool_args_progress.py +0 -0
  304. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_event_renderer_tool_fold.py +0 -0
  305. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_exit_confirm_view.py +0 -0
  306. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_exit_guard.py +0 -0
  307. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_exit_watchdog.py +0 -0
  308. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_exit_watchdog_subprocess.py +0 -0
  309. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_file_ref_hint.py +0 -0
  310. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_format_error.py +0 -0
  311. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_goal_edit_handlers.py +0 -0
  312. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_goal_edit_view.py +0 -0
  313. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_goal_paused_hint.py +0 -0
  314. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_goal_resume_tui.py +0 -0
  315. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_goal_resume_view.py +0 -0
  316. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_goal_slash_command.py +0 -0
  317. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_handle_error.py +0 -0
  318. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_history_drain_throttle.py +0 -0
  319. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_history_printer.py +0 -0
  320. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_history_printer_log.py +0 -0
  321. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_history_printer_styles.py +0 -0
  322. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_history_printer_subtitle_position.py +0 -0
  323. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_history_printer_tool_fold.py +0 -0
  324. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_history_sync.py +0 -0
  325. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_history_sync_tool_fold.py +0 -0
  326. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_i18n.py +0 -0
  327. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_image_chips.py +0 -0
  328. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_image_preprocess_offload_lag.py +0 -0
  329. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_import_weight.py +0 -0
  330. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_input_behavior.py +0 -0
  331. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_input_history.py +0 -0
  332. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_input_separator_counter.py +0 -0
  333. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_installed_tab.py +0 -0
  334. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_interrupt_exit_semantics.py +0 -0
  335. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_jobs_panel.py +0 -0
  336. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_jobs_picker.py +0 -0
  337. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_key_bindings_system_messages.py +0 -0
  338. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_layout_coordinator.py +0 -0
  339. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_loading_modal_suppression.py +0 -0
  340. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_loading_tip_picker.py +0 -0
  341. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_logging_adapter.py +0 -0
  342. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_logging_file_handler.py +0 -0
  343. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_logo.py +0 -0
  344. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_main_args_yolo.py +0 -0
  345. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_main_profile_entry.py +0 -0
  346. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_markdown_render.py +0 -0
  347. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_marketplaces_tab.py +0 -0
  348. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_mcp_cli.py +0 -0
  349. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_mcp_cli_scope_defaults.py +0 -0
  350. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_mcp_serve.py +0 -0
  351. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_mcp_slash_command.py +0 -0
  352. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_mention_completer.py +0 -0
  353. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_menu_cursor_unification.py +0 -0
  354. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_message_style.py +0 -0
  355. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_modal_freeze_timing.py +0 -0
  356. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_modal_panel_visibility.py +0 -0
  357. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_model_switch_command.py +0 -0
  358. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_model_tier_style.py +0 -0
  359. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_no_raw_colors.py +0 -0
  360. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_output_style_slash_command.py +0 -0
  361. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_permission_mode_cycle.py +0 -0
  362. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_plugin_auto_update_runner.py +0 -0
  363. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_plugin_auto_update_store.py +0 -0
  364. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_plugin_auto_update_tui.py +0 -0
  365. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_plugin_operation_state.py +0 -0
  366. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_plugin_slash_commands.py +0 -0
  367. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_plugin_tui_components.py +0 -0
  368. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_preflight.py +0 -0
  369. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_preflight_copilot.py +0 -0
  370. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_preflight_wizard_ui.py +0 -0
  371. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_pty_output_integrity.py +0 -0
  372. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_question_broker.py +0 -0
  373. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_question_key_bindings.py +0 -0
  374. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_question_view.py +0 -0
  375. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_resize_guard.py +0 -0
  376. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_resume_picker.py +0 -0
  377. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_resume_picker_exit_safety.py +0 -0
  378. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_resume_preview.py +0 -0
  379. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_resume_selector.py +0 -0
  380. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_rewind_command_semantics.py +0 -0
  381. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_rpc_relay_e2e_smoke.py +0 -0
  382. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_rpc_relay_process_smoke.py +0 -0
  383. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_rpc_v4_stdio_smoke.py +0 -0
  384. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_rpc_v4_ws_smoke.py +0 -0
  385. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_rpc_ws_bind_failure.py +0 -0
  386. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_run_clock.py +0 -0
  387. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_running_tool_status_line.py +0 -0
  388. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_scm_request_status.py +0 -0
  389. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_scrollback_write_encoding.py +0 -0
  390. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_selection_menu.py +0 -0
  391. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_session_auto_title.py +0 -0
  392. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_session_query_token_summary.py +0 -0
  393. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_settings_write_guard.py +0 -0
  394. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_shell_mode.py +0 -0
  395. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_shutdown_noise_guard.py +0 -0
  396. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_shutdown_noise_integration.py +0 -0
  397. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_side_install.py +0 -0
  398. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_sigint_guard.py +0 -0
  399. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_sigint_key_binding.py +0 -0
  400. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_skill_slash_input.py +0 -0
  401. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_skills_slash_command.py +0 -0
  402. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_slash_add_dir.py +0 -0
  403. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_slash_argument_hint.py +0 -0
  404. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_slash_clear.py +0 -0
  405. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_slash_completer.py +0 -0
  406. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_slash_registry.py +0 -0
  407. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_startup_import_budget.py +0 -0
  408. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_startup_profile.py +0 -0
  409. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_status_bar.py +0 -0
  410. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_status_bar_mid_turn_refresh.py +0 -0
  411. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_status_bar_request_status.py +0 -0
  412. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_status_bar_transient.py +0 -0
  413. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_stream_pacer.py +0 -0
  414. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_stream_pacing_tick.py +0 -0
  415. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_stream_staging_panel.py +0 -0
  416. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_style_class_coverage.py +0 -0
  417. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_synchronized_output.py +0 -0
  418. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tab_title.py +0 -0
  419. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_task_panel_format.py +0 -0
  420. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_task_panel_key_bindings.py +0 -0
  421. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_task_panel_rendering.py +0 -0
  422. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_task_poll.py +0 -0
  423. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_terminal_title.py +0 -0
  424. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_theme.py +0 -0
  425. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tips.py +0 -0
  426. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_todo_panel_busy_gating.py +0 -0
  427. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_approval_key_bindings.py +0 -0
  428. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_approval_tui.py +0 -0
  429. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_approval_view.py +0 -0
  430. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_approval_view_workflow.py +0 -0
  431. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_fold.py +0 -0
  432. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_fold_panel.py +0 -0
  433. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_fold_view.py +0 -0
  434. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_result_formatters.py +0 -0
  435. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_result_state.py +0 -0
  436. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_result_store.py +0 -0
  437. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_result_viewer.py +0 -0
  438. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_result_viewer_key_bindings.py +0 -0
  439. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_view.py +0 -0
  440. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tool_view_styles.py +0 -0
  441. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_transcript_viewer.py +0 -0
  442. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_transcript_viewer_tool_fold.py +0 -0
  443. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_builtin_slash_chain.py +0 -0
  444. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_deferred_prewarm.py +0 -0
  445. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_elapsed_status.py +0 -0
  446. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_esc_queue.py +0 -0
  447. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_exit_idempotence.py +0 -0
  448. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_hot_reload.py +0 -0
  449. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_image_chip_seed.py +0 -0
  450. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_image_paste.py +0 -0
  451. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_image_path_upgrade.py +0 -0
  452. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_image_restore.py +0 -0
  453. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_image_submit.py +0 -0
  454. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_interrupt_queue_recall.py +0 -0
  455. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_llm_retry_panel.py +0 -0
  456. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_loading_tip_rotation.py +0 -0
  457. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_local_interactive_barrier.py +0 -0
  458. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_mcp_init_gate.py +0 -0
  459. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_paste_history_persistence.py +0 -0
  460. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_paste_newline_guard.py +0 -0
  461. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_paste_placeholder.py +0 -0
  462. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_plugin_load.py +0 -0
  463. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_provider_error_shield.py +0 -0
  464. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_queue_pop_images.py +0 -0
  465. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_queue_preview.py +0 -0
  466. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_queue_sdk_source.py +0 -0
  467. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_replace_session_resume_hint.py +0 -0
  468. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_scheduled_fire_log.py +0 -0
  469. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_scratchpad_fold_wiring.py +0 -0
  470. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_send_undo_window.py +0 -0
  471. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_session_observers.py +0 -0
  472. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_shutdown_cancel_propagation.py +0 -0
  473. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_split_invariance.py +0 -0
  474. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_startup_latency.py +0 -0
  475. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_surrogate_repair.py +0 -0
  476. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_thinking_display.py +0 -0
  477. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_tool_result_registry_lifecycle.py +0 -0
  478. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_tui_window_too_small_fallback.py +0 -0
  479. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_ui_mode_derivation.py +0 -0
  480. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_ui_tick_exception_isolation.py +0 -0
  481. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_ultracode_keyword.py +0 -0
  482. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_ultracode_keyword_frame_rate.py +0 -0
  483. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_ultracode_keyword_submit.py +0 -0
  484. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_ultracode_shimmer_render.py +0 -0
  485. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_update_check.py +0 -0
  486. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_update_cli.py +0 -0
  487. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_upstream_surrogate_merge_characterization.py +0 -0
  488. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_usage_command.py +0 -0
  489. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_wellformed_terminal_input.py +0 -0
  490. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_whitelabel_clear_logo.py +0 -0
  491. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_windows_sigint_console.py +0 -0
  492. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_workflows_panel.py +0 -0
  493. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_workflows_panel_model.py +0 -0
  494. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_wrap_user_text.py +0 -0
  495. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tests/test_zipapp_launcher_path.py +0 -0
  496. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tools/diagnose_windows_shim_rename.py +0 -0
  497. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tools/logo_lab.py +0 -0
  498. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tools/nico_preview.py +0 -0
  499. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tools/probe_conhost_char_width.py +0 -0
  500. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tools/probe_conhost_render_replay.py +0 -0
  501. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tools/startup_bench.py +0 -0
  502. {comate_cli-0.12.4b2 → comate_cli-0.12.4b3}/tools/verify_windows_self_update_semantics.py +0 -0
@@ -71,6 +71,10 @@
71
71
  标签不再展示 `uv tool install …` 长串(与 Windows 对齐),措辞改为「退出后运行」;
72
72
  更新失败的兜底文案仍保留完整 uv 修复命令。源码 editable 安装下自更新必然被拒,
73
73
  启动检测与第二次启动弹窗两个入口现在直接静音;PATH 缺 uv 不静音。
74
+ - compact 期间底部 loading 文案由 `Compacting context...`(三个半角点)改为
75
+ `Compacting context…`(单个省略号字符):与 `Running…` 等其它进行时状态词、
76
+ 以及设计稿 docs/superpowers/specs/2026-05-18-auto-compact-awareness-design.md
77
+ 已写的写法对齐,少占两列宽。
74
78
 
75
79
  ### Fixed
76
80
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: comate-cli
3
- Version: 0.12.4b2
3
+ Version: 0.12.4b3
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
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.13
16
16
  Requires-Python: <3.14,>=3.11
17
17
  Requires-Dist: charset-normalizer==3.4.7
18
18
  Requires-Dist: comate-agent-sdk<0.13,>=0.12.10
19
- Requires-Dist: comate-rpc<0.2,>=0.1.2
19
+ Requires-Dist: comate-rpc<0.2,>=0.1.3
20
20
  Requires-Dist: concurrent-log-handler>=0.9.25
21
21
  Requires-Dist: curl-cffi==0.13.0
22
22
  Requires-Dist: httpx<0.29.0,>=0.28.1
@@ -59,9 +59,9 @@ PRINT_OUTPUT_FORMAT_UNSUPPORTED = frozenset({"stream-json"})
59
59
 
60
60
  # (rpc_stdio, resume_session_id, resume_select, print_prompt, output_format, rpc_relay,
61
61
  # add_dirs, rpc_ws_port, yolo);rpc_ws_port 为 None 表示不是 --rpc-ws,0 表示由系统挑空闲端口;
62
- # rpc_relay 为 None 表示不是 --rpc-relay,否则是(中转地址, Agent 令牌)。
62
+ # rpc_relay 为 None 表示不是 --rpc-relay,否则是(中转地址, Agent 令牌, 是否允许远程切到 bypassPermissions)。
63
63
  ParsedArgs = tuple[
64
- bool, str | None, bool, str | None, str, tuple[str, str] | None, tuple[str, ...], int | None, bool
64
+ bool, str | None, bool, str | None, str, tuple[str, str, bool] | None, tuple[str, ...], int | None, bool
65
65
  ]
66
66
  # --rpc-relay 的 Agent 令牌优先从这里取(不进进程列表和 shell 历史)。
67
67
  AGENT_TOKEN_ENV = "COMATE_AGENT_TOKEN"
@@ -274,7 +274,7 @@ def _usage_text(command_name: str = "comate") -> str:
274
274
  f" {command_name} [--rpc-stdio] [--add-dir <path>]...\n"
275
275
  f" {command_name} --rpc-ws [--port <n>] [--add-dir <path>]...\n"
276
276
  f" {command_name} --rpc-relay --relay-url <ws(s)://...> [--agent-token <token>]"
277
- " [--add-dir <path>]...\n"
277
+ " [--allow-bypass] [--add-dir <path>]...\n"
278
278
  f" {command_name} -p [--output-format text|json] <prompt>\n"
279
279
  f" {command_name} resume [<session_id>]\n"
280
280
  f" {command_name} mcp <subcommand> [options]\n"
@@ -301,6 +301,8 @@ def _usage_text(command_name: str = "comate") -> str:
301
301
  " --relay-url <url> (--rpc-relay) Relay address, ws:// or wss://\n"
302
302
  " --agent-token <t> (--rpc-relay) Agent token; the COMATE_AGENT_TOKEN environment\n"
303
303
  " variable takes precedence and is recommended\n"
304
+ " --allow-bypass (--rpc-relay) Let remote terminals switch sessions to\n"
305
+ " bypassPermissions; refused by default\n"
304
306
  " --yolo Start in bypassPermissions (YOLO) mode\n"
305
307
  " --version, -V Print version and exit\n"
306
308
  " --pre (update) Also consider pre-release versions"
@@ -347,6 +349,8 @@ def _parse_args(argv: list[str]) -> ParsedArgs:
347
349
  port_arg: str | None = None
348
350
  relay_url_arg: str | None = None
349
351
  agent_token_arg: str | None = None
352
+ # 故意没有对应的环境变量:放开远程免审批,必须在启动命令里明着写。
353
+ allow_bypass = False
350
354
  print_mode = False
351
355
  output_format = PRINT_OUTPUT_FORMAT_TEXT
352
356
  output_format_explicit = False
@@ -380,6 +384,10 @@ def _parse_args(argv: list[str]) -> ParsedArgs:
380
384
  agent_token_arg = value
381
385
  index += 1
382
386
  continue
387
+ if arg == "--allow-bypass":
388
+ allow_bypass = True
389
+ index += 1
390
+ continue
383
391
  if arg == "--port" or arg.startswith("--port="):
384
392
  if arg == "--port":
385
393
  index += 1
@@ -439,12 +447,18 @@ def _parse_args(argv: list[str]) -> ParsedArgs:
439
447
 
440
448
  raise _ArgumentError(i18n(message.rpc_mode_conflict))
441
449
  if not rpc_relay_flag:
442
- for option, value in (("--relay-url", relay_url_arg), ("--agent-token", agent_token_arg)):
443
- if value is not None:
450
+ for option, given in (
451
+ ("--relay-url", relay_url_arg is not None),
452
+ ("--agent-token", agent_token_arg is not None),
453
+ ("--allow-bypass", allow_bypass),
454
+ ):
455
+ if given:
444
456
  from comate_cli.terminal_agent.i18n import i18n, message
445
457
 
446
458
  raise _ArgumentError(i18n(message.rpc_relay_option_without_rpc_relay, option=option))
447
- rpc_relay = _parse_rpc_relay(relay_url_arg, agent_token_arg) if rpc_relay_flag else None
459
+ rpc_relay = (
460
+ (*_parse_rpc_relay(relay_url_arg, agent_token_arg), allow_bypass) if rpc_relay_flag else None
461
+ )
448
462
  if port_arg is not None and not rpc_ws:
449
463
  from comate_cli.terminal_agent.i18n import i18n, message
450
464
 
@@ -1176,7 +1176,7 @@ async def run(
1176
1176
  *,
1177
1177
  rpc_stdio: bool = False,
1178
1178
  rpc_ws_port: int | None = None,
1179
- rpc_relay: tuple[str, str] | None = None,
1179
+ rpc_relay: tuple[str, str, bool] | None = None,
1180
1180
  resume_session_id: str | None = None,
1181
1181
  resume_select: bool = False,
1182
1182
  print_message: str | None = None,
@@ -1367,13 +1367,14 @@ async def run(
1367
1367
  from comate_cli.terminal_agent.backend.client import resolve_distribution_version
1368
1368
 
1369
1369
  RpcRelayServer = _import_rpc_relay_server()
1370
- relay_url, agent_token = rpc_relay
1370
+ relay_url, agent_token, allow_bypass = rpc_relay
1371
1371
  await RpcRelayServer(
1372
1372
  agent=agent,
1373
1373
  default_cwd=project_root,
1374
1374
  relay_url=relay_url,
1375
1375
  token=agent_token,
1376
1376
  version=resolve_distribution_version(profile.package_name),
1377
+ allow_bypass=allow_bypass,
1377
1378
  ).run()
1378
1379
  return
1379
1380
 
@@ -9,6 +9,7 @@
9
9
  - 令牌被拒(关闭码 1008,或握手阶段 HTTP 401 / 403):从没来过终端 = 不可能有会话,
10
10
  往标准错误报一句、非零退出;来过终端 = 可能有会话在跑,打 ERROR、进程留着让它们跑完。
11
11
  - 上线、掉线、重拨只进日志;不打就绪行(没有宿主程序读它)。
12
+ - 远程终端默认不能把会话切到 ``bypassPermissions``:主人启动时加 ``--allow-bypass`` 才放开。
12
13
 
13
14
  websockets 客户端只出现在这个文件里;不走 ``--rpc-relay`` 时整个文件都不 import。
14
15
  """
@@ -92,9 +93,20 @@ class RpcRelayServer:
92
93
  relay_url: str,
93
94
  token: str,
94
95
  version: str,
96
+ allow_bypass: bool = False,
95
97
  reconnect_backoff: Sequence[float] = DEFAULT_RECONNECT_BACKOFF_S,
96
98
  ) -> None:
97
- self._host = SessionHost(agent=agent, default_cwd=default_cwd, commands=CliCommandCatalog())
99
+ self._host = SessionHost(
100
+ agent=agent,
101
+ default_cwd=default_cwd,
102
+ commands=CliCommandCatalog(),
103
+ allow_bypass=allow_bypass,
104
+ )
105
+ if allow_bypass:
106
+ logger.warning(
107
+ "rpc relay: --allow-bypass is set; remote terminals may switch sessions to "
108
+ "bypassPermissions (tools run without approval)"
109
+ )
98
110
  self._url = relay_url
99
111
  self._token = token
100
112
  self._meta = HelloMeta(version=version, hostname=socket.gethostname(), cwd=str(default_cwd))
@@ -1067,7 +1067,7 @@ class RenderPanelsMixin:
1067
1067
 
1068
1068
  if self._renderer.is_auto_compacting() or self._is_compacting:
1069
1069
  return self._append_loading_detail_fragment(
1070
- self._animated_loading_fragments("Compacting context...")
1070
+ self._animated_loading_fragments("Compacting context…")
1071
1071
  )
1072
1072
 
1073
1073
  if self._animator.is_active:
@@ -1,12 +1,13 @@
1
1
  # Comate CLI RPC 接入指南(协议 v4)
2
2
 
3
- `comate --rpc-stdio`、`comate --rpc-ws` 和 `comate --rpc-relay` 把 comate 变成一个可以被别的程序驱动的服务:
4
- IDE 插件、Tauri 桌面壳、本机网页、经中转的远程网页都能开会话、发消息、看流式输出、回答审批。
3
+ > 本文件与 comate-guide 的 `comate_agent_sdk/bundled_skills/comate-guide/references/rpc.md` 正文逐字相同(两份都是完整版,那份随安装包分发),改一份必须同步另一份。
4
+ > 协议实现在 `packages/comate_rpc`,术语见它的 `CONTEXT.md`;TS 客户端的生成类型、测试、demo 页面见 `packages/comate_rpc/ts/README.md`;中转服务的完整参数见 `packages/comate_relay/README.md`。
5
5
 
6
- - 三种模式都说**协议 v4**(JSON-RPC 2.0)。v3 已删除,v3 客户端会在握手时被拒绝(ADR-0024)。
6
+ `comate --rpc-stdio`、`comate --rpc-ws`、`comate --rpc-relay` 把 comate 变成一个可以被别的程序驱动的服务:开会话、发消息、看流式输出、回答审批。
7
+
8
+ - 三种模式都说**协议 v4**(JSON-RPC 2.0)。v3 已删除,v3 客户端握手即被拒。
7
9
  - 三种模式和终端 TUI 平级:共用同一套 settings / preflight / Agent 组装逻辑,工具集是 comate 全量。
8
- - 协议实现在 `packages/comate_rpc`,术语见它的 `CONTEXT.md`;TS 客户端库和 demo 页面见 `packages/comate_rpc/ts/README.md`。
9
- - 字段的精确定义以生成的清单为准:`packages/comate_rpc/ts/src/generated/schema.json`(所有方法、事件、数据结构)。
10
+ - 字段的精确定义以仓库内生成的清单为准:`packages/comate_rpc/ts/src/generated/schema.json`。
10
11
 
11
12
  ## 启动
12
13
 
@@ -14,19 +15,18 @@ IDE 插件、Tauri 桌面壳、本机网页、经中转的远程网页都能开
14
15
  | --- | --- | --- |
15
16
  | `comate --rpc-stdio` | 标准输入输出 | 一行一条 JSON。只有一个客户端;连接断了进程就结束 |
16
17
  | `comate --rpc-ws [--port N]` | 本机 WebSocket | 一个文本帧一条 JSON。可同时连多个客户端;`--port` 不填或填 0 = 系统挑空闲端口 |
17
- | `comate --rpc-relay --relay-url URL` | 拨出到中转 | Agent 主动连中转,不开任何端口;终端都连中转。见下面「经中转远程接入」 |
18
+ | `comate --rpc-relay --relay-url URL` | 拨出到中转 | Agent 主动连中转,不开任何端口;终端都连中转。见「经中转远程接入」 |
18
19
 
19
- `--rpc-ws` 就绪后往标准输出打**唯一一行** JSON,启动它的宿主程序读这一行拿连接方式:
20
+ `--rpc-ws` 就绪后往标准输出打**唯一一行** JSON,宿主程序读这一行拿连接方式:
20
21
 
21
22
  ```json
22
23
  {"type": "ready", "url": "ws://127.0.0.1:<port>/", "token": "<令牌>"}
23
24
  ```
24
25
 
25
26
  - 只绑定 `127.0.0.1`,没有 `--host`:Agent 永远不监听外网,远程要走中转。
26
- - 令牌每次启动随机生成。浏览器建 WebSocket 不能加请求头,所以令牌放在**子协议**里:
27
- `new WebSocket(url, ["comate-rpc", token])`。令牌不对,握手直接被拒(HTTP 403)。
27
+ - 令牌每次启动随机生成,放在 WebSocket **子协议**里:`new WebSocket(url, ["comate-rpc", token])`。令牌不对,握手被拒(HTTP 403)。
28
28
  - 端口被占用:标准错误打一句说明,退出码非 0。
29
- - 日志写 `~/.comate/logs/agent.log`(和 TUI 同一个文件,级别看 `COMATE_LOG_LEVEL`),不写标准输出,也不写标准错误;标准错误只留给启动失败时那一句报错。三种模式都一样。
29
+ - 日志写 `~/.comate/logs/agent.log`(和 TUI 同一个文件,级别看 `COMATE_LOG_LEVEL`),不写标准输出和标准错误;标准错误只留给启动失败时那一句报错。三种模式都一样。
30
30
 
31
31
  不支持的启动组合(参数解析阶段直接报错):
32
32
 
@@ -34,48 +34,74 @@ IDE 插件、Tauri 桌面壳、本机网页、经中转的远程网页都能开
34
34
  | --- | --- |
35
35
  | `--rpc-stdio`、`--rpc-ws`、`--rpc-relay` 给了不止一个 | 只能选一种通道 |
36
36
  | `--port` 不配 `--rpc-ws` | 端口只对 WebSocket 有意义 |
37
- | `--relay-url` / `--agent-token` 不配 `--rpc-relay` | 只对中转有意义 |
37
+ | `--relay-url` / `--agent-token` / `--allow-bypass` 不配 `--rpc-relay` | 只对中转有意义 |
38
38
  | `--rpc-relay` 没给 `--relay-url`,或地址不是 `ws://` / `wss://` 开头 | 不知道往哪拨 |
39
39
  | `--rpc-relay` 既没有 `COMATE_AGENT_TOKEN` 也没有 `--agent-token` | 没令牌拨出去也会被拒 |
40
40
  | `comate resume ... --rpc-*` | 恢复会话走 `session.open` 的 `session_id` |
41
41
  | `--rpc-* --yolo` | 权限模式由每个 `session.open` 的 `permission_mode` 决定 |
42
42
  | `-p ... --rpc-*` | print 模式是另一条一次性输出路径 |
43
43
 
44
- preflight 照常执行,但不交互。宿主要提前配好 provider / settings;preflight 不通过时进程在进入 RPC 服务前退出。
44
+ preflight 照常执行但不交互:宿主要提前配好 provider / settings,preflight 不通过时进程在进入 RPC 服务前退出。
45
45
 
46
46
  ## 经中转远程接入(`--rpc-relay`)
47
47
 
48
- 适用场景:Agent 跑在 sandbox(容器、远程机器)里,那里**只许出、不许进**;桌面和手机都在别处。
49
- Agent 主动拨出到中转服务 `comate_relay`,终端也连中转,中转按「哪个 Agent、哪条连接」原样转发(ADR-0026)。
48
+ 适用场景:Agent 跑在 sandbox(容器、远程机器)里,那里**只许出、不许进**;桌面和手机在别处。Agent 主动拨出到中转服务 `comate-relay`,终端也连中转,中转按「哪个 Agent、哪条连接」原样转发。
50
49
 
51
50
  ```bash
52
51
  COMATE_AGENT_TOKEN=<Agent 令牌> comate --rpc-relay --relay-url wss://relay.example.com/ws/agent-link
53
52
  ```
54
53
 
55
- - **令牌**:由中转管理员用 `comate-relay agent add` 创建,只在创建时显示一次。
54
+ - **令牌**:中转管理员用 `comate-relay agent add` 创建,只在创建时显示一次。
56
55
  - 推荐用环境变量 `COMATE_AGENT_TOKEN` 传:不会出现在进程列表和 shell 历史里。
57
56
  - 也可以用 `--agent-token <令牌>`。两者都给时**以环境变量为准**。
58
- - 拨出时令牌放在子协议里(`["comate-rpc", 令牌]`),和本机 WebSocket 同一个办法。
59
57
  - **上线**:连上后第一帧自报 `hello`(comate 版本、主机名、工作目录),只用于在中转上显示,不参与鉴权。
60
58
  - **Agent 端不开端口、不碰证书**。`wss://` 的证书由中转那边负责。
61
- - **不打就绪行**:标准输出上什么都没有。上线、掉线、重连都记在日志文件 `~/.comate/logs/agent.log` 里。
62
- - **终端看到的协议和本机完全一样**:握手、开会话、订阅、审批、断线续传都照旧,只是连接地址换成中转的。
59
+ - **不打就绪行**:标准输出什么都没有。上线、掉线、重连都只进日志。
60
+ - **终端看到的协议和本机完全一样**,唯一区别是下面的免审批限制。
61
+
62
+ **远程默认不能免审批**:`bypassPermissions`(工具不经审批直接执行)默认不许远程终端打开。
63
+
64
+ - 被拒的调用:`session.open` 带 `permission_mode: "bypassPermissions"`(开新会话或恢复旧会话),以及 `session.setPermissionMode` 切到 `bypassPermissions`。
65
+ - 被拒时回 -32602,`error.data.kind = "permission_mode_not_allowed"`,会话的权限模式不变。
66
+ - 用 `session_id` 接入已经活着的会话不检查:接入时 `permission_mode` 本来就不生效。
67
+ - Agent 主人启动时加 `--allow-bypass` 才放开,同时日志记一条 WARNING。这个开关**故意没有环境变量**,必须在启动命令里明着写。
68
+ - `--rpc-stdio` / `--rpc-ws` 只有本机能连,不受这条限制。
63
69
 
64
70
  断线与重连:
65
71
 
66
72
  | 情况 | Agent 怎么做 |
67
73
  | --- | --- |
68
74
  | 网络断了、中转重启、中转暂时连不上 | 等 1、2、5、10、30 秒依次重拨,之后每 30 秒一次。**重拨期间会话照跑**,终端重新接入后带(纪元号, 序号)续传 |
69
- | 被同一令牌的新 Agent 顶替(关闭码 4009) | 不再重拨,只打日志。进程不退出,会话照跑,否则两个实例会互踢个没完 |
70
- | 令牌被拒(关闭码 1008,或握手被拒 HTTP 401 / 403),且**从没有终端连进来过** | 标准错误打一句说明,退出码 1。这时不可能有会话,留着没有意义 |
75
+ | 被同一令牌的新 Agent 顶替(关闭码 4009) | 不再重拨,只打日志。进程不退出、会话照跑,否则两个实例会互踢个没完 |
76
+ | 令牌被拒(关闭码 1008,或握手 HTTP 401 / 403),且**从没有终端连进来过** | 标准错误打一句说明,退出码 1 |
71
77
  | 令牌被拒,但之前**有终端连进来过** | 不再重拨,打 ERROR 日志。进程不退出,让可能还在跑的会话跑完;Ctrl+C 结束 |
72
78
 
73
- - 中转掉线期间空闲计时**照常**:没有终端连着、又不在跑回合的会话,30 分钟后照样关掉(历史在磁盘上,重开即可)。
79
+ 中转掉线期间空闲计时照常:没有终端连着、又不在跑回合的会话,30 分钟后照样关掉(历史在磁盘上,重开即可)。
80
+
81
+ ### 部署中转服务 `comate-relay`
82
+
83
+ ```bash
84
+ comate-relay user add alice # 建账号,交互式输两次密码;脚本里用 --password-stdin
85
+ comate-relay agent add --user alice --name box # 打印 agent_id 和 Agent 令牌,令牌只显示这一次
86
+ comate-relay serve # 默认只听 127.0.0.1:8765;浏览器打开就是 demo 页
87
+ ```
88
+
89
+ - 其他子命令:`user remove` / `user list` / `user revoke`(撤销该账号全部登录令牌)、`agent remove` / `agent list`(永不显示令牌)。
90
+ - 监听非本机地址必须给 `--certfile` / `--keyfile`(跑 HTTPS / WSS),或显式加 `--allow-insecure-http`(仅限可信局域网),否则拒绝启动。
91
+ - Agent 拨入地址是 `/ws/agent-link`;终端的控制连接 `/ws/control`、连某个 Agent 用 `/ws/agents/{agent_id}`;登录 `POST /api/auth/login`。令牌一律放子协议 `["comate-rpc", 令牌]`。
92
+
93
+ 中转发给终端和 Agent 的关闭码:
94
+
95
+ | 关闭码 | 含义 | 该怎么做 |
96
+ | --- | --- | --- |
97
+ | 1008 | 令牌错误 / 过期 / 被撤销 | 终端回登录页;Agent 停止重拨 |
98
+ | 4003 | 这个 Agent 不属于你 | 终端不重连 |
99
+ | 4004 | Agent 离线 | 终端退避重连,Agent 回来后自动接上 |
100
+ | 4009 | 被同令牌的新连接顶替(发给旧 Agent) | Agent 停止重拨 |
74
101
 
75
102
  ## 协议骨架
76
103
 
77
- **只有客户端发请求,服务端只发通知。** 服务端不会反过来向客户端发请求——
78
- 审批和提问是会话状态,客户端用普通方法回答(见「审批和提问」)。
104
+ **只有客户端发请求,服务端只发通知。** 服务端不会反过来向客户端发请求;审批和提问是会话状态,客户端用普通方法回答。
79
105
 
80
106
  | 方法 | 方向 | 作用 |
81
107
  | --- | --- | --- |
@@ -87,8 +113,6 @@ COMATE_AGENT_TOKEN=<Agent 令牌> comate --rpc-relay --relay-url wss://relay.exa
87
113
  | `$/event` | 服务端 → 客户端(通知) | `{"subscription", "epoch", "seq", "event"}`,`event.type` 区分事件种类 |
88
114
 
89
115
  - 方法名是 `服务名.方法名`,参数和返回值字段都是 snake_case。
90
- - 协议版本不是 4:握手失败,`error.data = {"kind": "unsupported_protocol_version", "supported": [4]}`。
91
- - 握手前调别的方法:-32000,`data.kind = "not_initialized"`。
92
116
 
93
117
  最小对话(stdio,每行一条):
94
118
 
@@ -114,7 +138,7 @@ COMATE_AGENT_TOKEN=<Agent 令牌> comate --rpc-relay --relay-url wss://relay.exa
114
138
  | `session.open` | `cwd?`、`session_id?`、`permission_mode?`(默认 `default`)、`include_partial_messages?` | 开会话。`session_id` 指向进程里**已经活着**的会话时接入它,返回同一个句柄(`attached: true`),其余参数不生效;指向落盘的旧会话时恢复它 |
115
139
  | `session.query` | `session_handle`、`prompt` | 发一条消息。自定义斜杠命令(`/名字 参数`)先展开再发;内置命令不能用文本发,要用对应的 `session.*` 方法 |
116
140
  | `session.interrupt` | `session_handle` | 中断当前回合。`interrupted` 表示调用时是否真有回合在跑 |
117
- | `session.setPermissionMode` | `session_handle`、`mode` | `default` / `acceptEdits` / `bypassPermissions` |
141
+ | `session.setPermissionMode` | `session_handle`、`mode` | `default` / `acceptEdits` / `bypassPermissions`。经中转时 `bypassPermissions` 默认被拒 |
118
142
  | `session.setModelLevel` | `session_handle`、`level` | `LOW` / `MID` / `HIGH`,只换本会话,不写成用户默认值 |
119
143
  | `session.status` | `session_handle` | 会话状态 + 回合状态 + 用量 + 上下文信息 |
120
144
  | `session.compact` | `session_handle` | 手动压缩上下文 |
@@ -129,8 +153,7 @@ COMATE_AGENT_TOKEN=<Agent 令牌> comate --rpc-relay --relay-url wss://relay.exa
129
153
 
130
154
  ## 事件
131
155
 
132
- 订阅 `session.events` 后,每条 `$/event` 的 `event.type` 是下面之一。
133
- 这些名字是协议的一部分,和 Python 类名无关。**不认识的 `type` 直接跳过**,以后会加新事件。
156
+ 订阅 `session.events` 后,每条 `$/event` 的 `event.type` 是下面之一。这些名字是协议的一部分,和 Python 类名无关。**不认识的 `type` 直接跳过**,以后会加新事件。
134
157
 
135
158
  | 类别 | `type` |
136
159
  | --- | --- |
@@ -138,7 +161,8 @@ COMATE_AGENT_TOKEN=<Agent 令牌> comate --rpc-relay --relay-url wss://relay.exa
138
161
  | 回合 | `turn.started`、`turn.stopped`(`reason`:`completed` / `max_iterations` / `waiting_for_input` / `interrupted`) |
139
162
  | 输出 | `text`、`thinking`;开了 `include_partial_messages` 才有的增量:`text.delta`、`thinking.delta`、`stream.reset` |
140
163
  | 工具 | `tool.call`、`tool.result`;开了 `include_partial_messages` 才有:`tool.started`(模型刚开始写工具调用) |
141
- | 其他 | `llm.retry`、`usage.delta`、`subagent.*`、`job.*`、`tasks.updated`、`compaction.*`、`queue.changed`、`permissionMode.changed`、`modelLevel.changed` |
164
+ | 子 agent / 后台任务 | `subagent.started`、`subagent.progress`、`subagent.stopped`;`job.started`、`job.progress`、`job.completed` |
165
+ | 其他 | `llm.retry`、`usage.delta`、`tasks.updated`、`compaction.started`、`compaction.finished`、`queue.changed`、`permissionMode.changed`、`modelLevel.changed` |
142
166
  | 待处理项 | `interaction.pending`、`interaction.resolved`、`interaction.cancelled` |
143
167
 
144
168
  ### 断线续传和快照
@@ -148,8 +172,7 @@ COMATE_AGENT_TOKEN=<Agent 令牌> comate --rpc-relay --relay-url wss://relay.exa
148
172
  - 重新订阅时带上最后收到的 `epoch` 和 `seq`:
149
173
  - 纪元号对得上、缺的事件还在缓冲里 → 从下一条开始补发,不重复不缺。
150
174
  - 缺的事件已被挤出缓冲、或纪元号对不上(进程重启过)→ 先发一份 `snapshot`。
151
- - `snapshot` 包含:会话状态、回合状态(`idle` / `running` / `waiting_for_input`)、**还在等的待处理项**、队列、当前纪元号和序号。
152
- 重连后凭快照就能恢复界面,包括还没回答的审批。
175
+ - `snapshot` 包含:会话状态、回合状态(`idle` / `running` / `waiting_for_input`)、**还在等的待处理项**、队列、当前纪元号和序号。重连后凭快照就能恢复界面,包括还没回答的审批。
153
176
  - 进程重启过的话,旧的 `session_handle` 已经失效:用 `session_id` 重新 `session.open`。
154
177
 
155
178
  ## 审批和提问
@@ -167,16 +190,12 @@ COMATE_AGENT_TOKEN=<Agent 令牌> comate --rpc-relay --relay-url wss://relay.exa
167
190
  | `question` | `{"decision": "answer", "answers": [{"selected_options": [...], "custom_text"?: "..."}]}` 或 `{"decision": "reject"}` |
168
191
 
169
192
  `deny` 带 `interrupt: true` = 拒绝并结束本回合;不带 = 只拒绝这一个工具。
170
- 3. **第一个有效回答生效**,广播 `interaction.resolved`(带 `resolved_by`:是哪个客户端答的)。
171
- 之后再答同一项收到 -32002,客户端据此收起弹框。
172
- 4. 回答格式不对(包括拼错或多出字段)→「参数无效」,**不算回答**,这一项继续等。
173
- 提问的 `answers` 必须和 `content.questions` **一一对应、条数相同**,条数不对同样是「参数无效」
174
- (`data.kind: "wrong_answer_count"`)。
193
+ 3. **第一个有效回答生效**,广播 `interaction.resolved`(带 `resolved_by`:是哪个客户端答的)。之后再答同一项收到 -32002,客户端据此收起弹框。
194
+ 4. 回答格式不对(包括拼错或多出字段)→「参数无效」,**不算回答**,这一项继续等。提问的 `answers` 必须和 `content.questions` **一一对应、条数相同**,否则同样是「参数无效」(`data.kind: "wrong_answer_count"`)。
175
195
 
176
196
  - 不设超时:一直等到有人答、会话被中断、或会话关闭。
177
197
  - 会话被中断:广播 `interaction.cancelled`(`reason: "interrupted"`)。
178
- - 会话关闭(含空闲关闭、进程退出):还在等的审批一律**按拒绝处理**,提问按拒绝处理,
179
- 广播 `interaction.cancelled`(`reason: "session_closed"`)。权限永远不会默认放行。
198
+ - 会话关闭(含空闲关闭、进程退出):还在等的审批和提问一律**按拒绝处理**,广播 `interaction.cancelled`(`reason: "session_closed"`)。权限永远不会默认放行。
180
199
  - 客户端不需要事先声明「能不能弹审批框」。答不了就不答,别的客户端也能答。
181
200
 
182
201
  ## 错误码
@@ -189,18 +208,32 @@ COMATE_AGENT_TOKEN=<Agent 令牌> comate --rpc-relay --relay-url wss://relay.exa
189
208
  | -32002 | 待处理项不存在或已被别人回答 |
190
209
  | -32800 | 请求已被 `$/cancelRequest` 取消 |
191
210
 
192
- 额外信息统一放在 `error.data`,用 `kind` 区分具体原因,例如 `session_not_found`、`interaction_not_found`、`wrong_response_kind`(回答种类和待处理项对不上)、`not_initialized`。
211
+ 额外信息放在 `error.data`,用 `kind` 区分具体原因。客户端按 `kind` 分支,不要按 `message` 文本分支:
212
+
213
+ | `kind` | 错误码 | 什么时候出现 | `data` 里的其他字段 |
214
+ | --- | --- | --- | --- |
215
+ | `unsupported_protocol_version` | -32602 | 握手时协议版本不是 4 | `supported` |
216
+ | `not_initialized` | -32000 | 握手前调了别的方法 | — |
217
+ | `session_state` | -32000 | 会话当前状态不允许这个操作(例如已关闭、正在清空历史) | — |
218
+ | `session_not_found` | -32001 | `session_handle` 不存在(包括进程重启后的旧句柄) | — |
219
+ | `interaction_not_found` | -32002 | 待处理项不存在,或已被别人先答了 | `request_id` |
220
+ | `wrong_response_kind` | -32602 | 回答的种类和待处理项对不上(例如拿提问的回答去答审批) | `expected` |
221
+ | `wrong_answer_count` | -32602 | 提问的 `answers` 条数和 `questions` 不一样 | `expected`、`actual` |
222
+ | `command` | -32602 | `session.query` 里的斜杠命令展开失败 | — |
223
+ | `permission_mode_not_allowed` | -32602 | 经中转时要切到 `bypassPermissions`,但 Agent 没加 `--allow-bypass` | — |
224
+ | `unknown_subscription` | -32602 | `$/unsubscribe` 的订阅号不存在 | — |
225
+
226
+ 参数格式本身不对(缺字段、类型错等)也是 -32602,这时 `data` 里没有 `kind`,只有 `errors`:逐条列出哪个字段、错在哪。
193
227
 
194
228
  ## 会话生命周期(`--rpc-ws` / `--rpc-relay`)
195
229
 
196
230
  - 所有客户端都断开后,会话**继续跑**。
197
- - 同时满足「没有客户端订阅着」和「不在跑回合」才开始计时,持续 30 分钟就关闭(`session.closed`,`reason: "idle"`)。
198
- 等审批 / 等提问算「不在跑」。
231
+ - 同时满足「没有客户端订阅着」和「不在跑回合」才开始计时,持续 30 分钟就关闭(`session.closed`,`reason: "idle"`)。等审批 / 等提问算「不在跑」。
199
232
  - 两个客户端可以同时看、同时操作同一个会话:一方用 `session_id` 调 `session.open` 接入即可。
200
233
  - 一个客户端读得太慢(发送队列超过 500 条)会被断开,让它走续传;不影响会话和其他客户端。
201
234
  - 进程退出(Ctrl+C):关掉全部会话,还在等的审批按拒绝处理,正在跑的工具随会话中断。
202
235
 
203
- `--rpc-stdio` 只有一个连接:标准输入读到头、或写标准输出超时(对方不读),都等于连接断开 → 进程结束 → 全部会话关闭。
236
+ `--rpc-stdio` 只有一个连接:标准输入读到头、或写标准输出超时(对方 10 秒不读),都等于连接断开 → 进程结束 → 全部会话关闭。
204
237
 
205
238
  ## 默认值
206
239
 
@@ -208,5 +241,48 @@ COMATE_AGENT_TOKEN=<Agent 令牌> comate --rpc-relay --relay-url wss://relay.exa
208
241
  | --- | --- |
209
242
  | 会话空闲时限 | 30 分钟 |
210
243
  | 每会话事件缓冲 | 2000 条或 8 MiB,先到为准 |
211
- | 每连接发送队列 | 500 条 |
244
+ | 每连接发送队列 | 500 条(中转那条物理连接上是 5000 条) |
212
245
  | 审批 / 提问等待超时 | 无 |
246
+
247
+ ## TS 客户端(`comate-rpc-client`)
248
+
249
+ 仓库内 `packages/comate_rpc/ts/`,不发布 npm,前端用本地路径引用(`"comate-rpc-client": "file:../packages/comate_rpc/ts"`),直接导出 TS 源码,用 Vite 等打包器即可。
250
+
251
+ ```ts
252
+ import { openSession, RpcClient } from "comate-rpc-client";
253
+
254
+ // url / token 来自 `comate --rpc-ws` 的就绪行。进程重启后令牌会变:传函数,每次(重新)连接时现取。
255
+ const client = await RpcClient.connect({ url, token: () => currentToken, clientInfo: { name: "my-app" } });
256
+ const session = await openSession(client, {
257
+ params: { include_partial_messages: true },
258
+ handlers: {
259
+ approval: async (interaction, { signal }) => ({ decision: "allow" }),
260
+ question: async (interaction, { signal }) => ({ decision: "answer", answers: [{ selected_options: ["Blue"] }] }),
261
+ },
262
+ });
263
+ await session.query("hello");
264
+ for await (const event of session.events) {
265
+ if (event.type === "text.delta") render(event.delta);
266
+ }
267
+ ```
268
+
269
+ - **处理器**:别人先答了、或会话被中断时 `signal` 被中止,收起弹框即可。注册了处理器却漏了某一种时,那一种会打一次 `console.warn`(没人答,回合会卡住)。
270
+ - **取消**:每个方法都能带 `{ signal }`,中止后客户端发 `$/cancelRequest`。
271
+ - **错误**:服务端错误是 `RpcError`,带 `code` 和 `data`,按 `err.kind` 分支(取值见上面的表)。请求发出后连接断了是 `ConnectionLostError`(服务端可能执行了,也可能没有)。
272
+ - **重连**:断线自动重连(指数退避),订阅带(纪元号, 序号)续传,不会重复。进程重启过时,会话层用 `session_id` 重新打开会话、换上新句柄并收到快照,所以调方法时每次现读 `session.handle`。
273
+
274
+ 经中转连远程 Agent,拿到的是同一个会话客户端:
275
+
276
+ ```ts
277
+ import { loginToRelay, openSession, RelayClient } from "comate-rpc-client";
278
+
279
+ const login = await loginToRelay({ url: "http://127.0.0.1:8765/", account, password }); // { token, expires_at, device }
280
+ const relay = await RelayClient.connect({ url, token: login.token, clientInfo: { name: "my-app" } });
281
+ const changes = await relay.watchAgents(); // 上下线事件:先订阅、再列,中间的变化不会漏
282
+ const agents = await relay.agents.list(); // agent_id、名字、在线、最后上线时间、meta(版本、主机名、工作目录)
283
+ const client = await relay.connectAgent(agents[0].agent_id);
284
+ const session = await openSession(client, { handlers: { /* ... */ } });
285
+ ```
286
+
287
+ - 关闭码 1008 → 抛 `ReloginRequiredError`,回登录;4003 → `AgentNotYoursError`;第一次连就遇到 4004 → `AgentOfflineError`,连上以后遇到 4004 则自动退避重连。
288
+ - 登出:`logoutFromRelay({ url, token })`。
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "comate-cli"
7
- version = "0.12.4b2"
7
+ version = "0.12.4b3"
8
8
  description = "Comate terminal CLI built on comate-agent-sdk"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11,<3.14"
@@ -33,7 +33,7 @@ dependencies = [
33
33
  "concurrent-log-handler>=0.9.25",
34
34
  "httpx>=0.28.1,<0.29.0",
35
35
  "setproctitle>=1.3.7",
36
- "comate-rpc>=0.1.2,<0.2",
36
+ "comate-rpc>=0.1.3,<0.2",
37
37
  ]
38
38
 
39
39
  [project.urls]
@@ -140,7 +140,7 @@ class TestMainArgs(unittest.TestCase):
140
140
  ["--rpc-relay", "--relay-url", "wss://relay.example/ws/agent-link", "--agent-token", "tok"]
141
141
  )
142
142
  self.assertEqual(
143
- run.await_args.kwargs["rpc_relay"], ("wss://relay.example/ws/agent-link", "tok")
143
+ run.await_args.kwargs["rpc_relay"], ("wss://relay.example/ws/agent-link", "tok", False)
144
144
  )
145
145
  self.assertFalse(run.await_args.kwargs["rpc_stdio"])
146
146
  self.assertIsNone(run.await_args.kwargs["rpc_ws_port"])
@@ -769,7 +769,7 @@ def test_bad_rpc_ws_arguments_are_rejected_in_the_ui_language(language, argv, ke
769
769
  _RELAY_URL = "wss://relay.example/ws/agent-link"
770
770
 
771
771
 
772
- def _relay_target(argv: list[str]) -> tuple[str, str] | None:
772
+ def _relay_target(argv: list[str]) -> tuple[str, str, bool] | None:
773
773
  return main_module._parse_args(argv)[5]
774
774
 
775
775
 
@@ -778,10 +778,12 @@ def test_rpc_relay_takes_the_url_and_the_token_argument(monkeypatch) -> None:
778
778
  assert _relay_target(["--rpc-relay", "--relay-url", _RELAY_URL, "--agent-token", "from-arg"]) == (
779
779
  _RELAY_URL,
780
780
  "from-arg",
781
+ False,
781
782
  )
782
783
  assert _relay_target(["--rpc-relay", f"--relay-url={_RELAY_URL}", "--agent-token=from-arg"]) == (
783
784
  _RELAY_URL,
784
785
  "from-arg",
786
+ False,
785
787
  )
786
788
 
787
789
 
@@ -791,8 +793,9 @@ def test_rpc_relay_prefers_the_environment_token_over_the_argument(monkeypatch)
791
793
  assert _relay_target(["--rpc-relay", "--relay-url", _RELAY_URL, "--agent-token", "from-arg"]) == (
792
794
  _RELAY_URL,
793
795
  "from-env",
796
+ False,
794
797
  )
795
- assert _relay_target(["--rpc-relay", "--relay-url", _RELAY_URL]) == (_RELAY_URL, "from-env")
798
+ assert _relay_target(["--rpc-relay", "--relay-url", _RELAY_URL]) == (_RELAY_URL, "from-env", False)
796
799
 
797
800
 
798
801
  def test_an_empty_environment_token_counts_as_unset(monkeypatch) -> None:
@@ -800,6 +803,17 @@ def test_an_empty_environment_token_counts_as_unset(monkeypatch) -> None:
800
803
  assert _relay_target(["--rpc-relay", "--relay-url", _RELAY_URL, "--agent-token", "from-arg"]) == (
801
804
  _RELAY_URL,
802
805
  "from-arg",
806
+ False,
807
+ )
808
+
809
+
810
+ # 远程切到「全部放行」要主人在启动命令里明着写;只有 --rpc-relay 是远程,别的模式用它是配错了。
811
+ def test_allow_bypass_is_off_unless_given_with_rpc_relay(monkeypatch) -> None:
812
+ monkeypatch.setenv("COMATE_AGENT_TOKEN", "from-env")
813
+ assert _relay_target(["--rpc-relay", "--relay-url", _RELAY_URL, "--allow-bypass"]) == (
814
+ _RELAY_URL,
815
+ "from-env",
816
+ True,
803
817
  )
804
818
 
805
819
 
@@ -829,6 +843,8 @@ def test_without_rpc_relay_there_is_no_relay_target(monkeypatch) -> None:
829
843
  ),
830
844
  (["--relay-url", _RELAY_URL], message.rpc_relay_option_without_rpc_relay, {"option": "--relay-url"}),
831
845
  (["--agent-token", "t"], message.rpc_relay_option_without_rpc_relay, {"option": "--agent-token"}),
846
+ (["--allow-bypass"], message.rpc_relay_option_without_rpc_relay, {"option": "--allow-bypass"}),
847
+ (["--rpc-ws", "--allow-bypass"], message.rpc_relay_option_without_rpc_relay, {"option": "--allow-bypass"}),
832
848
  (
833
849
  ["--rpc-relay", "--rpc-ws", "--relay-url", _RELAY_URL, "--agent-token", "t"],
834
850
  message.rpc_mode_conflict,
@@ -61,7 +61,7 @@ asyncio.run(main())
61
61
  [
62
62
  {"rpc_stdio": True},
63
63
  {"rpc_ws_port": 0},
64
- {"rpc_relay": ("ws://127.0.0.1:1/ws/agent-link", "token")},
64
+ {"rpc_relay": ("ws://127.0.0.1:1/ws/agent-link", "token", False)},
65
65
  ],
66
66
  ids=["rpc-stdio", "rpc-ws", "rpc-relay"],
67
67
  )