comate-cli 0.5.3__tar.gz → 0.5.4__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.5.3 → comate_cli-0.5.4}/PKG-INFO +1 -1
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/event_renderer.py +1 -17
- {comate_cli-0.5.3 → comate_cli-0.5.4}/pyproject.toml +1 -1
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_event_renderer_streaming.py +9 -8
- {comate_cli-0.5.3 → comate_cli-0.5.4}/uv.lock +1453 -1437
- comate_cli-0.5.3/memory_system_tengu_moth_copse_report.md +0 -2366
- comate_cli-0.5.3//346/267/261/345/272/246Agent/345/217/257/350/247/206/345/214/226UI/350/256/276/350/256/241/346/200/235/350/267/257.md +0 -3173
- {comate_cli-0.5.3 → comate_cli-0.5.4}/.gitignore +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/README.md +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/__init__.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/__main__.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/main.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/mcp_cli.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/__init__.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/animations.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/app.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/assistant_render.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/codenames.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/custom_slash_commands.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/env_utils.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/error_display.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/figures.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/fragment_utils.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/history_printer.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/input_geometry.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/layout_coordinator.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/logging_adapter.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/logo.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/markdown_render.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/mention_completer.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/message_style.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/models.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/path_context_hint.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/__init__.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/components/__init__.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/components/detail_view.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/components/plugin_list.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/components/search_box.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/components/tab_bar.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/marketplace_install_view.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/plugin_picker.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/tabs/__init__.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/tabs/discover_tab.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/tabs/errors_tab.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/tabs/installed_tab.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/preflight.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/question_view.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/resume_selector.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/rewind_store.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/rpc_protocol.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/rpc_stdio.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/selection_menu.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/session_view.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/slash_commands.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/startup.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/status_bar.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/text_effects.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tips.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tool_view.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tui.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tui_parts/__init__.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tui_parts/commands.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tui_parts/history_sync.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tui_parts/input_behavior.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tui_parts/key_bindings.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tui_parts/mcp_connecting_view.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tui_parts/render_panels.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tui_parts/slash_command_registry.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/comate_cli/terminal_agent/tui_parts/ui_mode.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/docs/superpowers/plans/2026-04-03-phrase-shuffle.md +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/docs/superpowers/specs/2026-04-01-conditional-diff-subtitle-design.md +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/docs/superpowers/specs/2026-04-03-phrase-shuffle-design.md +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/conftest.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_animator_shuffle.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_app_mcp_preload.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_app_preflight_gate.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_app_print_mode.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_app_shutdown.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_app_usage_line.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_cli_project_root.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_compact_command_semantics.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_completion_context_activation.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_completion_status_panel.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_context_command.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_custom_slash_commands.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_discover_tab.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_errors_tab.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_event_renderer.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_event_renderer_boundary.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_event_renderer_e2e.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_format_error.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_handle_error.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_history_printer.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_history_sync.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_input_behavior.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_input_history.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_installed_tab.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_interrupt_exit_semantics.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_layout_coordinator.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_logging_adapter.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_logo.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_main_args.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_markdown_render.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_marketplaces_tab.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_mcp_cli.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_mcp_slash_command.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_mention_completer.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_path_context_hint.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_plugin_slash_commands.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_plugin_tui_components.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_preflight.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_preflight_copilot.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_question_key_bindings.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_question_view.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_resume_selector.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_rewind_command_semantics.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_rewind_store.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_rpc_protocol.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_rpc_stdio_bridge.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_selection_menu.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_skills_slash_command.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_slash_argument_hint.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_slash_completer.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_slash_registry.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_status_bar.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_status_bar_transient.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_task_panel_format.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_task_panel_key_bindings.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_task_panel_rendering.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_task_poll.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_tool_view.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_tui_elapsed_status.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_tui_mcp_init_gate.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_tui_paste_placeholder.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_tui_split_invariance.py +0 -0
- {comate_cli-0.5.3 → comate_cli-0.5.4}/tests/test_update_check.py +0 -0
|
@@ -1453,24 +1453,8 @@ class EventRenderer:
|
|
|
1453
1453
|
# 保证说明文字出现在 tool UI 之前(无 \n 结尾的模型也适用)。
|
|
1454
1454
|
self._force_flush_all()
|
|
1455
1455
|
normalized_id = str(tool_call_id or "").strip()
|
|
1456
|
-
if
|
|
1457
|
-
pass
|
|
1458
|
-
elif not should_show_tool_in_scrollback(tool_name, {}, is_result=False):
|
|
1459
|
-
# 对 hidden 工具(AskUserQuestion / TaskCreate / 静默任务工具等)
|
|
1460
|
-
# 跳过 pending 登记,避免 tool panel 闪烁一下。is_result=False
|
|
1461
|
-
# 这里按"发起阶段"查;将来 ToolResultEvent (is_result=True) 仍会
|
|
1462
|
-
# 正确地走既有落盘路径。
|
|
1463
|
-
self._pending_tool_starts.add(normalized_id)
|
|
1464
|
-
else:
|
|
1456
|
+
if normalized_id and normalized_id not in self._pending_tool_starts:
|
|
1465
1457
|
self._pending_tool_starts.add(normalized_id)
|
|
1466
|
-
self._running_tools[normalized_id] = _RunningTool(
|
|
1467
|
-
tool_name=tool_name,
|
|
1468
|
-
display_tool_name=resolve_display_tool_name(tool_name, {}),
|
|
1469
|
-
title=tool_name,
|
|
1470
|
-
started_at_monotonic=time.monotonic(),
|
|
1471
|
-
is_task=False,
|
|
1472
|
-
args_summary=ELLIPSIS,
|
|
1473
|
-
)
|
|
1474
1458
|
case ThinkingEvent(content=thinking):
|
|
1475
1459
|
if self._turn_received_thinking_delta:
|
|
1476
1460
|
pass
|
|
@@ -71,16 +71,16 @@ class TestQ11Fallback(unittest.TestCase):
|
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
class TestEventRendererToolCallStartPending(unittest.TestCase):
|
|
74
|
-
"""
|
|
74
|
+
"""ToolCallStart 只做文本 flush + 去重登记,不再预注册 running_tools。"""
|
|
75
75
|
|
|
76
|
-
def
|
|
76
|
+
def test_tool_call_start_does_not_register_running_tool(self) -> None:
|
|
77
77
|
renderer = EventRenderer()
|
|
78
78
|
renderer.handle_event(ToolCallStartEvent(tool_call_id="tc1", tool="Edit"))
|
|
79
79
|
|
|
80
|
-
#
|
|
80
|
+
# 不写 scrollback
|
|
81
81
|
self.assertEqual(renderer.history_entries(), [])
|
|
82
|
-
#
|
|
83
|
-
self.
|
|
82
|
+
# 不再在 running_tools 里登记 pending —— 等 ToolCallEvent 携带完整 args 后再注册
|
|
83
|
+
self.assertFalse(renderer.has_running_tools())
|
|
84
84
|
|
|
85
85
|
def test_tool_call_start_is_deduplicated(self) -> None:
|
|
86
86
|
renderer = EventRenderer()
|
|
@@ -88,11 +88,12 @@ class TestEventRendererToolCallStartPending(unittest.TestCase):
|
|
|
88
88
|
renderer.handle_event(event)
|
|
89
89
|
renderer.handle_event(event)
|
|
90
90
|
|
|
91
|
-
#
|
|
92
|
-
self.assertEqual(len(renderer.
|
|
91
|
+
# 去重:_pending_tool_starts 里只有一条,running_tools 为空
|
|
92
|
+
self.assertEqual(len(renderer._pending_tool_starts), 1)
|
|
93
|
+
self.assertEqual(len(renderer._running_tools), 0)
|
|
93
94
|
|
|
94
95
|
def test_tool_call_start_skipped_for_hidden_tools(self) -> None:
|
|
95
|
-
"""AskUserQuestion / TaskCreate /
|
|
96
|
+
"""AskUserQuestion / TaskCreate / 静默任务工具等:行为与普通工具一致,均不登记 running_tools。"""
|
|
96
97
|
renderer = EventRenderer()
|
|
97
98
|
for hidden_tool in ("AskUserQuestion", "TaskCreate", "TaskUpdate"):
|
|
98
99
|
renderer.handle_event(
|