comate-cli 0.7.0a3__tar.gz → 0.7.0a5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/PKG-INFO +1 -1
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/mention_completer.py +2 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/pyproject.toml +1 -1
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_completion_context_activation.py +2 -2
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_mention_completer.py +41 -9
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/.gitignore +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/CHANGELOG.md +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/README.md +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/bash-exit-code-green-dot-bug.md +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/__init__.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/__main__.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/main.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/mcp_cli.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/__init__.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/animations.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/app.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/assistant_render.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/codenames.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/custom_slash_commands.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/env_utils.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/error_display.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/event_renderer.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/figures.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/fragment_utils.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/history_printer.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/input_geometry.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/layout_coordinator.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/logging_adapter.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/logo.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/markdown_render.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/message_style.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/models.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/path_context_hint.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/__init__.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/components/__init__.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/components/detail_view.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/components/plugin_list.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/components/search_box.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/components/tab_bar.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/marketplace_install_view.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/plugin_picker.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/tabs/__init__.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/tabs/discover_tab.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/tabs/errors_tab.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/tabs/installed_tab.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/preflight.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/question_view.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/resume_picker.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/resume_preview.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/resume_selector.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/rpc_protocol.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/rpc_stdio.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/selection_menu.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/slash_commands.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/startup.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/status_bar.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/text_effects.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tips.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tool_result_formatters.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tool_result_store.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tool_result_viewer.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tool_view.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/transcript_viewer.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/__init__.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/btw_view.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/commands.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/history_sync.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/input_behavior.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/key_bindings.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/mcp_connecting_view.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/render_panels.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/slash_command_registry.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/ui_mode.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/docs/hooks.md +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/docs/superpowers/plans/2026-04-03-phrase-shuffle.md +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/docs/superpowers/specs/2026-04-01-conditional-diff-subtitle-design.md +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/docs/superpowers/specs/2026-04-03-phrase-shuffle-design.md +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/conftest.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_animator_shuffle.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_app_mcp_preload.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_app_preflight_gate.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_app_print_mode.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_app_shutdown.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_app_usage_line.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_btw_slash_command.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_cli_project_root.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_compact_command_semantics.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_completion_status_panel.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_context_command.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_custom_slash_commands.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_discover_tab.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_errors_tab.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_event_renderer.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_event_renderer_boundary.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_event_renderer_e2e.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_event_renderer_log_boundary.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_event_renderer_log_queue.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_event_renderer_streaming.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_format_error.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_handle_error.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_history_printer.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_history_printer_log.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_history_sync.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_input_behavior.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_input_history.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_installed_tab.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_interrupt_exit_semantics.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_layout_coordinator.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_logging_adapter.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_logo.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_main_args.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_markdown_render.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_marketplaces_tab.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_mcp_cli.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_mcp_slash_command.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_path_context_hint.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_plugin_slash_commands.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_plugin_tui_components.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_preflight.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_preflight_copilot.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_question_key_bindings.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_question_view.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_resume_picker.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_resume_preview.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_resume_selector.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_rewind_command_semantics.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_rpc_protocol.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_rpc_stdio_bridge.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_selection_menu.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_session_query_token_summary.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_skills_slash_command.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_slash_argument_hint.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_slash_completer.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_slash_registry.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_status_bar.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_status_bar_transient.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_task_panel_format.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_task_panel_key_bindings.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_task_panel_rendering.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_task_poll.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tool_result_formatters.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tool_result_store.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tool_result_viewer.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tool_result_viewer_key_bindings.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tool_view.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_transcript_viewer.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tui_elapsed_status.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tui_esc_queue.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tui_mcp_init_gate.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tui_paste_placeholder.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tui_queue_preview.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tui_queue_sdk_source.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tui_split_invariance.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tui_team_messages.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_tui_tool_result_registry_lifecycle.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/tests/test_update_check.py +0 -0
- {comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: comate-cli
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.0a5
|
|
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
|
|
@@ -73,7 +73,7 @@ class TestCompletionContextActivation(unittest.TestCase):
|
|
|
73
73
|
def test_warmup_callback_does_not_cancel_in_flight_completion(self) -> None:
|
|
74
74
|
class _FakeBuffer:
|
|
75
75
|
def __init__(self) -> None:
|
|
76
|
-
self.document = Document("
|
|
76
|
+
self.document = Document("@测", cursor_position=2)
|
|
77
77
|
self.complete_state = SimpleNamespace(completions=[])
|
|
78
78
|
self.start_calls = 0
|
|
79
79
|
|
|
@@ -95,7 +95,7 @@ class TestCompletionContextActivation(unittest.TestCase):
|
|
|
95
95
|
def test_warmup_callback_restarts_when_no_completion_is_active(self) -> None:
|
|
96
96
|
class _FakeBuffer:
|
|
97
97
|
def __init__(self) -> None:
|
|
98
|
-
self.document = Document("
|
|
98
|
+
self.document = Document("@测", cursor_position=2)
|
|
99
99
|
self.complete_state = None
|
|
100
100
|
self.start_calls = 0
|
|
101
101
|
|
|
@@ -443,7 +443,7 @@ class TestLocalFileMentionCompleter(unittest.TestCase):
|
|
|
443
443
|
return_value=subprocess.CompletedProcess(
|
|
444
444
|
args=["git"],
|
|
445
445
|
returncode=0,
|
|
446
|
-
stdout="Wukong
|
|
446
|
+
stdout="Wukong/测试用户.pdf\n",
|
|
447
447
|
stderr="",
|
|
448
448
|
),
|
|
449
449
|
) as mock_run:
|
|
@@ -453,12 +453,12 @@ class TestLocalFileMentionCompleter(unittest.TestCase):
|
|
|
453
453
|
self.assertTrue(started)
|
|
454
454
|
self.assertTrue(completed.wait(timeout=2.0))
|
|
455
455
|
|
|
456
|
-
result = completer.suggest("
|
|
456
|
+
result = completer.suggest("@测", max_items=16)
|
|
457
457
|
|
|
458
458
|
self.assertIsNotNone(result)
|
|
459
459
|
assert result is not None
|
|
460
460
|
_, candidates = result
|
|
461
|
-
self.assertIn("Wukong
|
|
461
|
+
self.assertIn("Wukong/测试用户.pdf", candidates)
|
|
462
462
|
mock_run.assert_called_once()
|
|
463
463
|
|
|
464
464
|
def test_deep_cache_warmup_coalesces_concurrent_requests(self) -> None:
|
|
@@ -481,7 +481,7 @@ class TestLocalFileMentionCompleter(unittest.TestCase):
|
|
|
481
481
|
return subprocess.CompletedProcess(
|
|
482
482
|
args=["git"],
|
|
483
483
|
returncode=0,
|
|
484
|
-
stdout="Wukong
|
|
484
|
+
stdout="Wukong/测试用户.pdf\n",
|
|
485
485
|
stderr="",
|
|
486
486
|
)
|
|
487
487
|
|
|
@@ -562,6 +562,38 @@ class TestLocalFileMentionCompleter(unittest.TestCase):
|
|
|
562
562
|
quotepath_index = cmd.index("core.quotepath=false")
|
|
563
563
|
self.assertLess(quotepath_index, ls_files_index)
|
|
564
564
|
|
|
565
|
+
def test_git_index_decodes_utf8_paths_without_windows_locale_loss(self) -> None:
|
|
566
|
+
"""Windows 中文 locale 下 subprocess text 模式默认按 GBK 解码。
|
|
567
|
+
|
|
568
|
+
git 在 core.quotepath=false 时输出 UTF-8 路径;索引命令必须显式用
|
|
569
|
+
UTF-8 解码,不能依赖进程 locale。
|
|
570
|
+
"""
|
|
571
|
+
payload = "docs/测.txt\n".encode("utf-8")
|
|
572
|
+
|
|
573
|
+
def _run_with_windows_locale_default(
|
|
574
|
+
args: list[str],
|
|
575
|
+
**kwargs: object,
|
|
576
|
+
) -> subprocess.CompletedProcess[str]:
|
|
577
|
+
encoding = str(kwargs.get("encoding") or "gbk")
|
|
578
|
+
errors = str(kwargs.get("errors") or "replace")
|
|
579
|
+
return subprocess.CompletedProcess(
|
|
580
|
+
args=args,
|
|
581
|
+
returncode=0,
|
|
582
|
+
stdout=payload.decode(encoding, errors=errors),
|
|
583
|
+
stderr="",
|
|
584
|
+
)
|
|
585
|
+
|
|
586
|
+
with patch(
|
|
587
|
+
"comate_cli.terminal_agent.mention_completer.subprocess.run",
|
|
588
|
+
side_effect=_run_with_windows_locale_default,
|
|
589
|
+
) as mock_run:
|
|
590
|
+
paths = self.completer._get_paths_from_git()
|
|
591
|
+
|
|
592
|
+
self.assertEqual(paths, ["docs/测.txt"])
|
|
593
|
+
_, kwargs = mock_run.call_args
|
|
594
|
+
self.assertEqual(kwargs.get("encoding"), "utf-8")
|
|
595
|
+
self.assertEqual(kwargs.get("errors"), "replace")
|
|
596
|
+
|
|
565
597
|
@unittest.skipUnless(shutil.which("git"), "git not available")
|
|
566
598
|
def test_git_index_handles_chinese_paths_with_default_quotepath(self) -> None:
|
|
567
599
|
"""Bug #1 端到端:在默认 git 配置下(core.quotepath=true),
|
|
@@ -609,24 +641,24 @@ class TestLocalFileMentionCompleter(unittest.TestCase):
|
|
|
609
641
|
def test_cjk_person_name_prefixes_find_deep_file_from_first_character(self) -> None:
|
|
610
642
|
"""Claude Code 对齐:中文人名/文件名从第一个字符开始就应该进深度 fuzzy。
|
|
611
643
|
|
|
612
|
-
固定三字符闸门会让
|
|
613
|
-
`Wukong
|
|
644
|
+
固定三字符闸门会让 `@测`、`@测试` 只查顶层,从而漏掉
|
|
645
|
+
`Wukong/测试用户.pdf`。这个测试锁住真实用户输入路径。
|
|
614
646
|
"""
|
|
615
647
|
with patch(
|
|
616
648
|
"comate_cli.terminal_agent.mention_completer.subprocess.run",
|
|
617
649
|
return_value=subprocess.CompletedProcess(
|
|
618
650
|
args=["git"],
|
|
619
651
|
returncode=0,
|
|
620
|
-
stdout="Wukong
|
|
652
|
+
stdout="Wukong/测试用户.pdf\n",
|
|
621
653
|
stderr="",
|
|
622
654
|
),
|
|
623
655
|
):
|
|
624
|
-
for query in ("
|
|
656
|
+
for query in ("@测", "@测试", "@测试用户"):
|
|
625
657
|
result = self.completer.suggest(query, max_items=16)
|
|
626
658
|
self.assertIsNotNone(result, f"suggest({query!r}) returned None")
|
|
627
659
|
assert result is not None
|
|
628
660
|
_, candidates = result
|
|
629
|
-
self.assertIn("Wukong
|
|
661
|
+
self.assertIn("Wukong/测试用户.pdf", candidates)
|
|
630
662
|
|
|
631
663
|
def test_short_ascii_query_still_restricted_to_top_level(self) -> None:
|
|
632
664
|
"""Bug #2 反向回归:纯 ASCII 短查询仍然走顶层,避免大仓库性能退化。
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/custom_slash_commands.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/components/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/components/search_box.py
RENAMED
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/components/tab_bar.py
RENAMED
|
File without changes
|
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/plugin_picker.py
RENAMED
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/tabs/__init__.py
RENAMED
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/tabs/discover_tab.py
RENAMED
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/tabs/errors_tab.py
RENAMED
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/tabs/installed_tab.py
RENAMED
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tool_result_formatters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/history_sync.py
RENAMED
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/input_behavior.py
RENAMED
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/key_bindings.py
RENAMED
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/mcp_connecting_view.py
RENAMED
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/comate_cli/terminal_agent/tui_parts/render_panels.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/docs/superpowers/plans/2026-04-03-phrase-shuffle.md
RENAMED
|
File without changes
|
|
File without changes
|
{comate_cli-0.7.0a3 → comate_cli-0.7.0a5}/docs/superpowers/specs/2026-04-03-phrase-shuffle-design.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|