{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/bash-exit-code-green-dot-bug.md"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/bash-exit-code-green-dot-bug.md"},"lines":{"text":"在 `/plugin` 页面 scrollback 中，Bash 工具执行失败（exit code != 0）时，工具结果行显示的是**绿色圆点**（代表成功），而不是**红色叉号**（代表失败）。\n"},"line_number":5,"absolute_offset":80,"submatches":[{"match":{"text":"scrollback"},"start":21,"end":31}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/bash-exit-code-green-dot-bug.md"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":46287,"human":"0.000046s"},"searches":1,"searches_with_match":1,"bytes_searched":4885,"bytes_printed":573,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_history_sync.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_history_sync.py"},"lines":{"text":"        self._printed_history_index = 0\n"},"line_number":33,"absolute_offset":970,"submatches":[{"match":{"text":"_printed_history"},"start":13,"end":29}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_history_sync.py"},"lines":{"text":"    def _drain_history_sync(self) -> None:\n"},"line_number":36,"absolute_offset":1046,"submatches":[{"match":{"text":"drain_history"},"start":9,"end":22}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_history_sync.py"},"lines":{"text":"    async def test_drain_history_async_uses_executor_terminal_print(self) -> None:\n"},"line_number":368,"absolute_offset":12912,"submatches":[{"match":{"text":"drain_history"},"start":19,"end":32}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_history_sync.py"},"lines":{"text":"            await sync._drain_history_async()\n"},"line_number":376,"absolute_offset":13261,"submatches":[{"match":{"text":"drain_history"},"start":24,"end":37}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_history_sync.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":51081,"human":"0.000051s"},"searches":1,"searches_with_match":1,"bytes_searched":13498,"bytes_printed":1341,"matched_lines":4,"matches":4}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_handle_error.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_handle_error.py"},"lines":{"text":"    def test_handle_error_writes_to_scrollback(self):\n"},"line_number":44,"absolute_offset":1292,"submatches":[{"match":{"text":"scrollback"},"start":36,"end":46}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_handle_error.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":26017,"human":"0.000026s"},"searches":1,"searches_with_match":1,"bytes_searched":3780,"bytes_printed":422,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/docs/superpowers/specs/2026-04-01-conditional-diff-subtitle-design.md"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/docs/superpowers/specs/2026-04-01-conditional-diff-subtitle-design.md"},"lines":{"text":"When Edit or MultiEdit completes, the scrollback always shows:\n"},"line_number":8,"absolute_offset":101,"submatches":[{"match":{"text":"scrollback"},"start":38,"end":48}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/docs/superpowers/specs/2026-04-01-conditional-diff-subtitle-design.md"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":33856,"human":"0.000034s"},"searches":1,"searches_with_match":1,"bytes_searched":2009,"bytes_printed":515,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_mcp_slash_command.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_mcp_slash_command.py"},"lines":{"text":"    async def test_slash_mcp_opens_selection_menu_without_scrollback_output(self) -> None:\n"},"line_number":176,"absolute_offset":5404,"submatches":[{"match":{"text":"scrollback"},"start":58,"end":68}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_mcp_slash_command.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":38352,"human":"0.000038s"},"searches":1,"searches_with_match":1,"bytes_searched":25485,"bytes_printed":470,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tips.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tips.py"},"lines":{"text":"    \"Check scrollback output separately from live TUI state.\",\n"},"line_number":15,"absolute_offset":732,"submatches":[{"match":{"text":"scrollback"},"start":11,"end":21}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tips.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":37602,"human":"0.000038s"},"searches":1,"searches_with_match":1,"bytes_searched":1802,"bytes_printed":446,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer_e2e.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer_e2e.py"},"lines":{"text":"StopEvent → finalize_turn。重点验证 scrollback (history) 内容\n"},"line_number":4,"absolute_offset":128,"submatches":[{"match":{"text":"scrollback"},"start":43,"end":53}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer_e2e.py"},"lines":{"text":"        # 容器内未 commit 内容应被丢弃 → scrollback 无新增 fence entry\n"},"line_number":138,"absolute_offset":5144,"submatches":[{"match":{"text":"scrollback"},"start":53,"end":63}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer_e2e.py"},"lines":{"text":"        # 作 synthetic close → scrollback 看到完整 fence\n"},"line_number":155,"absolute_offset":5934,"submatches":[{"match":{"text":"scrollback"},"start":34,"end":44}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer_e2e.py"},"lines":{"text":"        # legacy 路径：scrollback 看到整段\n"},"line_number":169,"absolute_offset":6626,"submatches":[{"match":{"text":"scrollback"},"start":26,"end":36}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer_e2e.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":44264,"human":"0.000044s"},"searches":1,"searches_with_match":1,"bytes_searched":6910,"bytes_printed":1414,"matched_lines":4,"matches":4}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tui_tool_result_registry_lifecycle.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tui_tool_result_registry_lifecycle.py"},"lines":{"text":"            tui._replay_scrollback_after_rewind = _replay\n"},"line_number":85,"absolute_offset":2620,"submatches":[{"match":{"text":"scrollback"},"start":24,"end":34}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tui_tool_result_registry_lifecycle.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":19727,"human":"0.000020s"},"searches":1,"searches_with_match":1,"bytes_searched":3054,"bytes_printed":470,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/error_display.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/error_display.py"},"lines":{"text":"    - message: full error text for scrollback (plain English, no icons)\n"},"line_number":10,"absolute_offset":239,"submatches":[{"match":{"text":"scrollback"},"start":35,"end":45}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/error_display.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":15781,"human":"0.000016s"},"searches":1,"searches_with_match":1,"bytes_searched":3075,"bytes_printed":471,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"    scrollback_preview,\n"},"line_number":10,"absolute_offset":199,"submatches":[{"match":{"text":"scrollback"},"start":4,"end":14}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":80,"absolute_offset":2433,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":101,"absolute_offset":3139,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":119,"absolute_offset":3841,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":138,"absolute_offset":4464,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":156,"absolute_offset":5022,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":168,"absolute_offset":5403,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":180,"absolute_offset":5876,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":192,"absolute_offset":6357,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":208,"absolute_offset":6901,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":224,"absolute_offset":7485,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":243,"absolute_offset":8241,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":262,"absolute_offset":8991,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":283,"absolute_offset":9799,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":309,"absolute_offset":10784,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":326,"absolute_offset":11417,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":345,"absolute_offset":12161,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":368,"absolute_offset":12998,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":393,"absolute_offset":13774,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":417,"absolute_offset":14611,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":437,"absolute_offset":15339,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_result_formatters.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":83141,"human":"0.000083s"},"searches":1,"searches_with_match":1,"bytes_searched":17857,"bytes_printed":6576,"matched_lines":21,"matches":21}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_view.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_view.py"},"lines":{"text":"# Tools that are always hidden from scrollback (have dedicated event channels).\n"},"line_number":69,"absolute_offset":1970,"submatches":[{"match":{"text":"scrollback"},"start":36,"end":46}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_view.py"},"lines":{"text":"# milestones are mirrored to scrollback.\n"},"line_number":73,"absolute_offset":2213,"submatches":[{"match":{"text":"scrollback"},"start":29,"end":39}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_view.py"},"lines":{"text":"def should_show_tool_in_scrollback(\n"},"line_number":77,"absolute_offset":2328,"submatches":[{"match":{"text":"scrollback"},"start":24,"end":34}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_view.py"},"lines":{"text":"    \"\"\"Determine whether a tool call/result should appear in scrollback.\n"},"line_number":83,"absolute_offset":2478,"submatches":[{"match":{"text":"scrollback"},"start":61,"end":71}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_view.py"},"lines":{"text":"    \"\"\"根据工具名 + 参数返回 scrollback 语义显示名称。\"\"\"\n"},"line_number":338,"absolute_offset":10218,"submatches":[{"match":{"text":"scrollback"},"start":38,"end":48}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_view.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":68983,"human":"0.000069s"},"searches":1,"searches_with_match":1,"bytes_searched":29738,"bytes_printed":1747,"matched_lines":5,"matches":5}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/resume_selector.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/resume_selector.py"},"lines":{"text":"        full_screen=True,  # alternate screen buffer，退出后零 scrollback 残留\n"},"line_number":253,"absolute_offset":7437,"submatches":[{"match":{"text":"scrollback"},"start":68,"end":78}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/resume_selector.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":30163,"human":"0.000030s"},"searches":1,"searches_with_match":1,"bytes_searched":7779,"bytes_printed":491,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"lines":{"text":"    \"\"\"Verify task tools are hidden from scrollback except on error.\"\"\"\n"},"line_number":738,"absolute_offset":27923,"submatches":[{"match":{"text":"scrollback"},"start":41,"end":51}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"lines":{"text":"    def test_taskcreate_success_hidden_from_scrollback(self) -> None:\n"},"line_number":740,"absolute_offset":27996,"submatches":[{"match":{"text":"scrollback"},"start":44,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"lines":{"text":"    def test_taskcreate_error_shown_in_scrollback(self) -> None:\n"},"line_number":748,"absolute_offset":28490,"submatches":[{"match":{"text":"scrollback"},"start":39,"end":49}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"lines":{"text":"    def test_taskupdate_completed_success_hidden_from_scrollback(self) -> None:\n"},"line_number":757,"absolute_offset":29040,"submatches":[{"match":{"text":"scrollback"},"start":54,"end":64}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"lines":{"text":"    def test_taskupdate_error_shown_in_scrollback(self) -> None:\n"},"line_number":765,"absolute_offset":29563,"submatches":[{"match":{"text":"scrollback"},"start":39,"end":49}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"lines":{"text":"    def test_taskupdate_in_progress_hidden_from_scrollback(self) -> None:\n"},"line_number":773,"absolute_offset":30074,"submatches":[{"match":{"text":"scrollback"},"start":48,"end":58}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"lines":{"text":"    def test_tasklist_hidden_from_scrollback(self) -> None:\n"},"line_number":781,"absolute_offset":30593,"submatches":[{"match":{"text":"scrollback"},"start":34,"end":44}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"lines":{"text":"    def test_tasklist_error_shown_in_scrollback(self) -> None:\n"},"line_number":789,"absolute_offset":31056,"submatches":[{"match":{"text":"scrollback"},"start":37,"end":47}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"lines":{"text":"    def test_scrollback_omits_expand_hint_for_short_tool_result(self) -> None:\n"},"line_number":1235,"absolute_offset":48884,"submatches":[{"match":{"text":"scrollback"},"start":13,"end":23}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"lines":{"text":"    def test_scrollback_contains_expand_hint_for_more_than_ten_line_tool_result(self) -> None:\n"},"line_number":1269,"absolute_offset":50021,"submatches":[{"match":{"text":"scrollback"},"start":13,"end":23}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"lines":{"text":"    \"\"\"Verify @path hint lines appear after user messages in scrollback.\"\"\"\n"},"line_number":1326,"absolute_offset":51949,"submatches":[{"match":{"text":"scrollback"},"start":61,"end":71}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":109266,"human":"0.000109s"},"searches":1,"searches_with_match":1,"bytes_searched":56642,"bytes_printed":3708,"matched_lines":11,"matches":11}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tui_queue_sdk_source.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tui_queue_sdk_source.py"},"lines":{"text":"    def test_injected_human_queue_message_is_seeded_to_scrollback(self) -> None:\n"},"line_number":193,"absolute_offset":6103,"submatches":[{"match":{"text":"scrollback"},"start":55,"end":65}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tui_queue_sdk_source.py"},"lines":{"text":"    def test_consumed_human_queue_trigger_starts_turn_and_seeds_scrollback(self) -> None:\n"},"line_number":228,"absolute_offset":7326,"submatches":[{"match":{"text":"scrollback"},"start":64,"end":74}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tui_queue_sdk_source.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":30109,"human":"0.000030s"},"searches":1,"searches_with_match":1,"bytes_searched":11475,"bytes_printed":813,"matched_lines":2,"matches":2}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_result_formatters.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_result_formatters.py"},"lines":{"text":"def scrollback_preview(rec: ToolResultRecord) -> tuple[RenderableType, str | None]:\n"},"line_number":417,"absolute_offset":14019,"submatches":[{"match":{"text":"scrollback"},"start":4,"end":14}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_result_formatters.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":40044,"human":"0.000040s"},"searches":1,"searches_with_match":1,"bytes_searched":26610,"bytes_printed":503,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        self._printed_history_index = 0\n"},"line_number":237,"absolute_offset":8528,"submatches":[{"match":{"text":"_printed_history"},"start":13,"end":29}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # 否则多余的固定高度会导致 prompt_toolkit 非全屏渲染时高度波动 → scrollback 污染。\n"},"line_number":442,"absolute_offset":17146,"submatches":[{"match":{"text":"scrollback"},"start":97,"end":107}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # Team inbox 消息直连 scrollback（绕开 session_event_queue，实现实时显示）\n"},"line_number":583,"absolute_offset":23956,"submatches":[{"match":{"text":"scrollback"},"start":34,"end":44}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        \"\"\"将本次 running 耗时以极客风格写入 history scrollback.\"\"\"\n"},"line_number":843,"absolute_offset":33865,"submatches":[{"match":{"text":"scrollback"},"start":65,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"                    # 后续 _drain_history_async（同 frame）写 scrollback。\n"},"line_number":1076,"absolute_offset":44929,"submatches":[{"match":{"text":"drain_history"},"start":30,"end":43},{"match":{"text":"scrollback"},"start":68,"end":78}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"                await self._drain_history_async()\n"},"line_number":1347,"absolute_offset":55866,"submatches":[{"match":{"text":"drain_history"},"start":28,"end":41}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"                # 动态帧率：busy/动画时降为 6fps（缓解 scrollback 污染），idle 时 4fps\n"},"line_number":1384,"absolute_offset":57431,"submatches":[{"match":{"text":"scrollback"},"start":68,"end":78}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        await self._replay_scrollback_after_rewind()\n"},"line_number":1508,"absolute_offset":62186,"submatches":[{"match":{"text":"scrollback"},"start":27,"end":37}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"            # Ensure scrollback prints don't mix with the inline (full_screen=False) UI.\n"},"line_number":1555,"absolute_offset":63637,"submatches":[{"match":{"text":"scrollback"},"start":21,"end":31}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":159876,"human":"0.000160s"},"searches":1,"searches_with_match":1,"bytes_searched":72168,"bytes_printed":3220,"matched_lines":9,"matches":10}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/marketplace_install_view.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/marketplace_install_view.py"},"lines":{"text":"            on_done: 安装成功后自动调用的回调，用于关闭面板并输出 scrollback 消息。\n"},"line_number":88,"absolute_offset":2530,"submatches":[{"match":{"text":"scrollback"},"start":88,"end":98}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/marketplace_install_view.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":36080,"human":"0.000036s"},"searches":1,"searches_with_match":1,"bytes_searched":10195,"bytes_printed":547,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer_streaming.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer_streaming.py"},"lines":{"text":"        # 不写 scrollback\n"},"line_number":90,"absolute_offset":3700,"submatches":[{"match":{"text":"scrollback"},"start":17,"end":27}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer_streaming.py"},"lines":{"text":"    \"\"\"spec §6.4：StopEvent / finalize_turn 调用，保证 scrollback 看到完整 turn。\n"},"line_number":730,"absolute_offset":30103,"submatches":[{"match":{"text":"scrollback"},"start":62,"end":72}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_event_renderer_streaming.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":72750,"human":"0.000073s"},"searches":1,"searches_with_match":1,"bytes_searched":36461,"bytes_printed":779,"matched_lines":2,"matches":2}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logging_adapter.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logging_adapter.py"},"lines":{"text":"    - 仅入 EventRenderer pending 队列，由明确 boundary 写入 scrollback\n"},"line_number":53,"absolute_offset":1651,"submatches":[{"match":{"text":"scrollback"},"start":70,"end":80}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logging_adapter.py"},"lines":{"text":"    - WARNING/ERROR 以用户友好格式显示在 TUI scrollback\n"},"line_number":278,"absolute_offset":9224,"submatches":[{"match":{"text":"scrollback"},"start":55,"end":65}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logging_adapter.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":30124,"human":"0.000030s"},"searches":1,"searches_with_match":1,"bytes_searched":12183,"bytes_printed":818,"matched_lines":2,"matches":2}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/app.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/app.py"},"lines":{"text":"    \"\"\"在 TUI 内异步加载 MCP，初始化阶段不输出 scrollback 文案。\"\"\"\n"},"line_number":238,"absolute_offset":7761,"submatches":[{"match":{"text":"scrollback"},"start":62,"end":72}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/app.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":27675,"human":"0.000028s"},"searches":1,"searches_with_match":1,"bytes_searched":14618,"bytes_printed":473,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"    scrollback_preview,\n"},"line_number":54,"absolute_offset":1230,"submatches":[{"match":{"text":"scrollback"},"start":4,"end":14}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"from comate_cli.terminal_agent.tool_view import summarize_tool_args, resolve_display_tool_name, should_show_tool_in_scrollback\n"},"line_number":60,"absolute_offset":1362,"submatches":[{"match":{"text":"scrollback"},"start":116,"end":126}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        与 text delta 对称：按完整行即时 commit 到 scrollback，未换行尾巴留在\n"},"line_number":442,"absolute_offset":16120,"submatches":[{"match":{"text":"scrollback"},"start":62,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        scrollback 看到 \"thinking → text\" 而非 \"text → thinking\" 错序。\n"},"line_number":534,"absolute_offset":20267,"submatches":[{"match":{"text":"scrollback"},"start":8,"end":18}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        保证 scrollback 看到完整 turn 内容。\n"},"line_number":552,"absolute_offset":20959,"submatches":[{"match":{"text":"scrollback"},"start":15,"end":25}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"            \"Skip duplicate system message in scrollback: severity=%s content=%r\",\n"},"line_number":611,"absolute_offset":23362,"submatches":[{"match":{"text":"scrollback"},"start":46,"end":56}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        # text_pending / thinking）保证 scrollback 看到完整内容\n"},"line_number":673,"absolute_offset":25835,"submatches":[{"match":{"text":"scrollback"},"start":43,"end":53}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        \"\"\"线程安全入口：只入队，不调度 prompt_toolkit，不立即写 scrollback。\"\"\"\n"},"line_number":819,"absolute_offset":31031,"submatches":[{"match":{"text":"scrollback"},"start":84,"end":94}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        \"\"\"Drain pending log，按 log_subtype 决定是否写入 scrollback。\"\"\"\n"},"line_number":827,"absolute_offset":31371,"submatches":[{"match":{"text":"scrollback"},"start":66,"end":76}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        \"\"\"追加一条灰色无前缀的计时统计行到 history scrollback.\"\"\"\n"},"line_number":916,"absolute_offset":34264,"submatches":[{"match":{"text":"scrollback"},"start":68,"end":78}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"            text, subtitle = scrollback_preview(rec)\n"},"line_number":1150,"absolute_offset":44120,"submatches":[{"match":{"text":"scrollback"},"start":29,"end":39}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        text, subtitle = scrollback_preview(rec)\n"},"line_number":1193,"absolute_offset":45743,"submatches":[{"match":{"text":"scrollback"},"start":25,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                # tool 调用前先把 _text_pending / _thinking_batch 落到 scrollback，\n"},"line_number":1362,"absolute_offset":52833,"submatches":[{"match":{"text":"scrollback"},"start":78,"end":88}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                if not should_show_tool_in_scrollback(tool_name, args_dict):\n"},"line_number":1422,"absolute_offset":55846,"submatches":[{"match":{"text":"scrollback"},"start":43,"end":53}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                if not should_show_tool_in_scrollback(tool_name, stored_args, is_result=True, is_error=is_error):\n"},"line_number":1428,"absolute_offset":56306,"submatches":[{"match":{"text":"scrollback"},"start":43,"end":53}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                # 在 scrollback 渲染计划内容，让用户审阅后再决策。\n"},"line_number":1555,"absolute_offset":62625,"submatches":[{"match":{"text":"scrollback"},"start":22,"end":32}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":207786,"human":"0.000208s"},"searches":1,"searches_with_match":1,"bytes_searched":64645,"bytes_printed":5713,"matched_lines":16,"matches":16}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"    should_show_tool_in_scrollback,\n"},"line_number":8,"absolute_offset":184,"submatches":[{"match":{"text":"scrollback"},"start":24,"end":34}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"TaskCreate\", {\"subject\": \"do X\"}))\n"},"line_number":73,"absolute_offset":2342,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"TaskCreate\", {\"subject\": \"do X\"}, is_result=True))\n"},"line_number":76,"absolute_offset":2496,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertTrue(should_show_tool_in_scrollback(\"TaskCreate\", {}, is_result=True, is_error=True))\n"},"line_number":79,"absolute_offset":2663,"submatches":[{"match":{"text":"scrollback"},"start":44,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"TaskUpdate\", {\"taskId\": \"1\", \"status\": \"completed\"}))\n"},"line_number":83,"absolute_offset":2880,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"TaskUpdate\", {\"taskId\": \"1\", \"status\": \"completed\"}, is_result=True))\n"},"line_number":86,"absolute_offset":3063,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertTrue(should_show_tool_in_scrollback(\"TaskUpdate\", {\"taskId\": \"1\", \"status\": \"completed\"}, is_result=True, is_error=True))\n"},"line_number":89,"absolute_offset":3259,"submatches":[{"match":{"text":"scrollback"},"start":44,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"TaskUpdate\", {\"taskId\": \"1\", \"status\": \"in_progress\"}))\n"},"line_number":92,"absolute_offset":3468,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"TaskUpdate\", {\"taskId\": \"1\", \"status\": \"in_progress\"}, is_result=True))\n"},"line_number":95,"absolute_offset":3655,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertTrue(should_show_tool_in_scrollback(\"TaskUpdate\", {\"taskId\": \"1\", \"status\": \"in_progress\"}, is_result=True, is_error=True))\n"},"line_number":98,"absolute_offset":3855,"submatches":[{"match":{"text":"scrollback"},"start":44,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"TaskUpdate\", {}))\n"},"line_number":101,"absolute_offset":4065,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertTrue(should_show_tool_in_scrollback(\"TaskUpdate\", {}, is_result=True, is_error=True))\n"},"line_number":104,"absolute_offset":4210,"submatches":[{"match":{"text":"scrollback"},"start":44,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"TaskList\", {}))\n"},"line_number":108,"absolute_offset":4413,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"TaskList\", {}, is_result=True))\n"},"line_number":111,"absolute_offset":4546,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertTrue(should_show_tool_in_scrollback(\"TaskList\", {}, is_result=True, is_error=True))\n"},"line_number":114,"absolute_offset":4692,"submatches":[{"match":{"text":"scrollback"},"start":44,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"TaskGet\", {}))\n"},"line_number":118,"absolute_offset":4891,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertTrue(should_show_tool_in_scrollback(\"TaskGet\", {}, is_result=True, is_error=True))\n"},"line_number":121,"absolute_offset":5019,"submatches":[{"match":{"text":"scrollback"},"start":44,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"AskUserQuestion\", {}))\n"},"line_number":125,"absolute_offset":5233,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"AskUserQuestion\", {}, is_result=True))\n"},"line_number":128,"absolute_offset":5380,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertTrue(should_show_tool_in_scrollback(\"AskUserQuestion\", {}, is_result=True, is_error=True))\n"},"line_number":131,"absolute_offset":5540,"submatches":[{"match":{"text":"scrollback"},"start":44,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"ExitPlanMode\", {}))\n"},"line_number":135,"absolute_offset":5756,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertTrue(should_show_tool_in_scrollback(\"ExitPlanMode\", {}, is_result=True, is_error=True))\n"},"line_number":138,"absolute_offset":5894,"submatches":[{"match":{"text":"scrollback"},"start":44,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertTrue(should_show_tool_in_scrollback(\"Read\", {\"file_path\": \"/tmp/a.py\"}))\n"},"line_number":142,"absolute_offset":6088,"submatches":[{"match":{"text":"scrollback"},"start":44,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertTrue(should_show_tool_in_scrollback(\"Edit\", {}, is_result=True, is_error=True))\n"},"line_number":145,"absolute_offset":6233,"submatches":[{"match":{"text":"scrollback"},"start":44,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"tasklist\", {}))\n"},"line_number":149,"absolute_offset":6411,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"lines":{"text":"        self.assertFalse(should_show_tool_in_scrollback(\"TASKCREATE\", {\"subject\": \"x\"}))\n"},"line_number":150,"absolute_offset":6484,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/tests/test_tool_view.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":114746,"human":"0.000115s"},"searches":1,"searches_with_match":1,"bytes_searched":13466,"bytes_printed":9162,"matched_lines":26,"matches":26}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"            # 将 /mcp 命令和结果刷入 scrollback\n"},"line_number":682,"absolute_offset":24776,"submatches":[{"match":{"text":"scrollback"},"start":45,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        # 否则 user entry 的尾部空行会在 scrollback 中残留。\n"},"line_number":1229,"absolute_offset":43981,"submatches":[{"match":{"text":"scrollback"},"start":50,"end":60}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":88291,"human":"0.000088s"},"searches":1,"searches_with_match":1,"bytes_searched":62134,"bytes_printed":814,"matched_lines":2,"matches":2}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"from comate_cli.terminal_agent.tool_view import should_show_tool_in_scrollback\n"},"line_number":23,"absolute_offset":797,"submatches":[{"match":{"text":"scrollback"},"start":68,"end":78}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"    async def _replay_scrollback_after_rewind(self) -> None:\n"},"line_number":36,"absolute_offset":1349,"submatches":[{"match":{"text":"scrollback"},"start":22,"end":32}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"        \"\"\"清屏并重建 scrollback：Logo + 当前会话历史。\"\"\"\n"},"line_number":37,"absolute_offset":1410,"submatches":[{"match":{"text":"scrollback"},"start":27,"end":37}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"        self._printed_history_index = 0\n"},"line_number":39,"absolute_offset":1526,"submatches":[{"match":{"text":"_printed_history"},"start":13,"end":29}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"            scrollback_console = Console(\n"},"line_number":47,"absolute_offset":1837,"submatches":[{"match":{"text":"scrollback"},"start":12,"end":22}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"            print_logo(scrollback_console, project_root=project_root)\n"},"line_number":53,"absolute_offset":2072,"submatches":[{"match":{"text":"scrollback"},"start":23,"end":33}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"                if not should_show_tool_in_scrollback(tool_name, resume_args, is_result=True, is_error=is_error):\n"},"line_number":152,"absolute_offset":6654,"submatches":[{"match":{"text":"scrollback"},"start":43,"end":53}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"        self._drain_history_sync()\n"},"line_number":197,"absolute_offset":8715,"submatches":[{"match":{"text":"drain_history"},"start":14,"end":27}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"    async def _drain_history_async(self) -> None:\n"},"line_number":266,"absolute_offset":11406,"submatches":[{"match":{"text":"drain_history"},"start":15,"end":28}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"                self._printed_history_index,\n"},"line_number":282,"absolute_offset":12062,"submatches":[{"match":{"text":"_printed_history"},"start":21,"end":37}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"            scrollback_console = Console(\n"},"line_number":309,"absolute_offset":13133,"submatches":[{"match":{"text":"scrollback"},"start":12,"end":22}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"            print_history_group_sync(scrollback_console, group)\n"},"line_number":314,"absolute_offset":13281,"submatches":[{"match":{"text":"scrollback"},"start":37,"end":47}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"    def _drain_history_sync(self) -> None:\n"},"line_number":318,"absolute_offset":13403,"submatches":[{"match":{"text":"drain_history"},"start":9,"end":22}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"                self._printed_history_index,\n"},"line_number":334,"absolute_offset":14051,"submatches":[{"match":{"text":"_printed_history"},"start":21,"end":37}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"        if self._printed_history_index >= len(entries):\n"},"line_number":361,"absolute_offset":15163,"submatches":[{"match":{"text":"_printed_history"},"start":16,"end":32}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"        previous_index = self._printed_history_index\n"},"line_number":363,"absolute_offset":15241,"submatches":[{"match":{"text":"_printed_history"},"start":30,"end":46}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"        pending = entries[self._printed_history_index :]\n"},"line_number":364,"absolute_offset":15294,"submatches":[{"match":{"text":"_printed_history"},"start":31,"end":47}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"        self._printed_history_index = len(entries)\n"},"line_number":365,"absolute_offset":15351,"submatches":[{"match":{"text":"_printed_history"},"start":13,"end":29}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"                self._printed_history_index,\n"},"line_number":377,"absolute_offset":15892,"submatches":[{"match":{"text":"_printed_history"},"start":21,"end":37}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":82054,"human":"0.000082s"},"searches":1,"searches_with_match":1,"bytes_searched":16223,"bytes_printed":6481,"matched_lines":19,"matches":19}}}
{"data":{"elapsed_total":{"human":"0.009883s","nanos":9883308,"secs":0},"stats":{"bytes_printed":47967,"bytes_searched":516692,"elapsed":{"human":"0.001494s","nanos":1494055,"secs":0},"matched_lines":134,"matches":135,"searches":24,"searches_with_match":24}},"type":"summary"}
