{"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":"scroll"},"start":35,"end":41}]}}
{"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":27543,"human":"0.000028s"},"searches":1,"searches_with_match":1,"bytes_searched":3075,"bytes_printed":467,"matched_lines":1,"matches":1}}}
{"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":"scroll"},"start":70,"end":76}]}}
{"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":277,"absolute_offset":9182,"submatches":[{"match":{"text":"scroll"},"start":55,"end":61}]}}
{"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":70580,"human":"0.000071s"},"searches":1,"searches_with_match":1,"bytes_searched":12141,"bytes_printed":810,"matched_lines":2,"matches":2}}}
{"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":"scroll"},"start":36,"end":42}]}}
{"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":"scroll"},"start":29,"end":35}]}}
{"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":"scroll"},"start":24,"end":30}]}}
{"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":"scroll"},"start":61,"end":67}]}}
{"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":"scroll"},"start":38,"end":44}]}}
{"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":106018,"human":"0.000106s"},"searches":1,"searches_with_match":1,"bytes_searched":29775,"bytes_printed":1727,"matched_lines":5,"matches":5}}}
{"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":"scroll"},"start":88,"end":94}]}}
{"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":20616,"human":"0.000021s"},"searches":1,"searches_with_match":1,"bytes_searched":10195,"bytes_printed":543,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"    preview_scroll: int = 0\n"},"line_number":62,"absolute_offset":1541,"submatches":[{"match":{"text":"scroll"},"start":12,"end":18}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._preview_body_window.vertical_scroll = 0\n"},"line_number":173,"absolute_offset":5851,"submatches":[{"match":{"text":"scroll"},"start":43,"end":49}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._state.preview_scroll = 0\n"},"line_number":252,"absolute_offset":9025,"submatches":[{"match":{"text":"scroll"},"start":28,"end":34}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._reset_preview_scroll()\n"},"line_number":254,"absolute_offset":9105,"submatches":[{"match":{"text":"scroll"},"start":28,"end":34}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._reset_preview_scroll()\n"},"line_number":260,"absolute_offset":9296,"submatches":[{"match":{"text":"scroll"},"start":28,"end":34}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._reset_preview_scroll()\n"},"line_number":300,"absolute_offset":10624,"submatches":[{"match":{"text":"scroll"},"start":28,"end":34}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"    def scroll_preview_page(self, direction: int) -> None:\n"},"line_number":302,"absolute_offset":10662,"submatches":[{"match":{"text":"scroll"},"start":8,"end":14}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._scroll_preview_by(step * direction)\n"},"line_number":306,"absolute_offset":10843,"submatches":[{"match":{"text":"scroll"},"start":14,"end":20}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"    def scroll_preview_half_page(self, direction: int) -> None:\n"},"line_number":308,"absolute_offset":10894,"submatches":[{"match":{"text":"scroll"},"start":8,"end":14}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._scroll_preview_by(step * direction)\n"},"line_number":312,"absolute_offset":11093,"submatches":[{"match":{"text":"scroll"},"start":14,"end":20}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"            self._reset_preview_scroll()\n"},"line_number":362,"absolute_offset":13050,"submatches":[{"match":{"text":"scroll"},"start":32,"end":38}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"            self._reset_preview_scroll()\n"},"line_number":443,"absolute_offset":16065,"submatches":[{"match":{"text":"scroll"},"start":32,"end":38}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"                \"PgUp/PgDn scroll | Ctrl+U/Ctrl+D half-page | Enter confirm\\n\\n\",\n"},"line_number":631,"absolute_offset":24746,"submatches":[{"match":{"text":"scroll"},"start":27,"end":33}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"    def _reset_preview_scroll(self) -> None:\n"},"line_number":655,"absolute_offset":25681,"submatches":[{"match":{"text":"scroll"},"start":23,"end":29}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._state.preview_scroll = 0\n"},"line_number":656,"absolute_offset":25726,"submatches":[{"match":{"text":"scroll"},"start":28,"end":34}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._preview_body_window.vertical_scroll = 0\n"},"line_number":657,"absolute_offset":25765,"submatches":[{"match":{"text":"scroll"},"start":43,"end":49}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"    def _scroll_preview_by(self, delta_lines: int) -> None:\n"},"line_number":659,"absolute_offset":25820,"submatches":[{"match":{"text":"scroll"},"start":9,"end":15}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        next_scroll = max(0, self._state.preview_scroll + delta_lines)\n"},"line_number":662,"absolute_offset":25928,"submatches":[{"match":{"text":"scroll"},"start":13,"end":19},{"match":{"text":"scroll"},"start":49,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._state.preview_scroll = next_scroll\n"},"line_number":663,"absolute_offset":25999,"submatches":[{"match":{"text":"scroll"},"start":28,"end":34},{"match":{"text":"scroll"},"start":42,"end":48}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._preview_body_window.vertical_scroll = next_scroll\n"},"line_number":664,"absolute_offset":26048,"submatches":[{"match":{"text":"scroll"},"start":43,"end":49},{"match":{"text":"scroll"},"start":57,"end":63}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":142941,"human":"0.000143s"},"searches":1,"searches_with_match":1,"bytes_searched":26363,"bytes_printed":6516,"matched_lines":20,"matches":23}}}
{"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._diff_panel_scroll = 0\n"},"line_number":240,"absolute_offset":8682,"submatches":[{"match":{"text":"scroll"},"start":25,"end":31}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        self._todo_panel_scroll = 0\n"},"line_number":242,"absolute_offset":8760,"submatches":[{"match":{"text":"scroll"},"start":25,"end":31}]}}
{"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":456,"absolute_offset":17524,"submatches":[{"match":{"text":"scroll"},"start":97,"end":103}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"                \"plugin.scroll-hint\": \"fg:ansigray\",\n"},"line_number":562,"absolute_offset":22508,"submatches":[{"match":{"text":"scroll"},"start":24,"end":30}]}}
{"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":610,"absolute_offset":24710,"submatches":[{"match":{"text":"scroll"},"start":34,"end":40}]}}
{"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":870,"absolute_offset":34619,"submatches":[{"match":{"text":"scroll"},"start":65,"end":71}]}}
{"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":1103,"absolute_offset":45683,"submatches":[{"match":{"text":"scroll"},"start":68,"end":74}]}}
{"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":1411,"absolute_offset":58185,"submatches":[{"match":{"text":"scroll"},"start":68,"end":74}]}}
{"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":1534,"absolute_offset":62897,"submatches":[{"match":{"text":"scroll"},"start":27,"end":33}]}}
{"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":1581,"absolute_offset":64348,"submatches":[{"match":{"text":"scroll"},"start":21,"end":27}]}}
{"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":210931,"human":"0.000211s"},"searches":1,"searches_with_match":1,"bytes_searched":72879,"bytes_printed":3409,"matched_lines":10,"matches":10}}}
{"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":"scroll"},"start":62,"end":68}]}}
{"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":35001,"human":"0.000035s"},"searches":1,"searches_with_match":1,"bytes_searched":14618,"bytes_printed":469,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"            fragments.append((\"class:plugin.scroll-hint\", f\"  {UP_ARROW} more above\"))\n"},"line_number":178,"absolute_offset":5968,"submatches":[{"match":{"text":"scroll"},"start":44,"end":50}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"            fragments.append((\"class:plugin.scroll-hint\", f\"  {DOWN_ARROW} more below\"))\n"},"line_number":219,"absolute_offset":7744,"submatches":[{"match":{"text":"scroll"},"start":44,"end":50}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":25036,"human":"0.000025s"},"searches":1,"searches_with_match":1,"bytes_searched":18416,"bytes_printed":878,"matched_lines":2,"matches":2}}}
{"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":"scroll"},"start":68,"end":74}]}}
{"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":36272,"human":"0.000036s"},"searches":1,"searches_with_match":1,"bytes_searched":7779,"bytes_printed":487,"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":"from comate_cli.terminal_agent.tool_view import summarize_tool_args, resolve_display_tool_name, should_show_tool_in_scrollback\n"},"line_number":52,"absolute_offset":1133,"submatches":[{"match":{"text":"scroll"},"start":116,"end":122}]}}
{"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":392,"absolute_offset":14318,"submatches":[{"match":{"text":"scroll"},"start":62,"end":68}]}}
{"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":484,"absolute_offset":18465,"submatches":[{"match":{"text":"scroll"},"start":8,"end":14}]}}
{"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":502,"absolute_offset":19157,"submatches":[{"match":{"text":"scroll"},"start":15,"end":21}]}}
{"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":561,"absolute_offset":21560,"submatches":[{"match":{"text":"scroll"},"start":46,"end":52}]}}
{"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":623,"absolute_offset":24033,"submatches":[{"match":{"text":"scroll"},"start":43,"end":49}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"    def reset_history_view(self) -> None:\n"},"line_number":655,"absolute_offset":25158,"submatches":[{"match":{"text":"history_view"},"start":14,"end":26}]}}
{"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":773,"absolute_offset":29327,"submatches":[{"match":{"text":"scroll"},"start":84,"end":90}]}}
{"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":869,"absolute_offset":32499,"submatches":[{"match":{"text":"scroll"},"start":68,"end":74}]}}
{"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":1532,"absolute_offset":60793,"submatches":[{"match":{"text":"scroll"},"start":78,"end":84}]}}
{"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":1586,"absolute_offset":63515,"submatches":[{"match":{"text":"scroll"},"start":43,"end":49}]}}
{"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":1592,"absolute_offset":63975,"submatches":[{"match":{"text":"scroll"},"start":43,"end":49}]}}
{"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":1718,"absolute_offset":70256,"submatches":[{"match":{"text":"scroll"},"start":22,"end":28}]}}
{"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":271915,"human":"0.000272s"},"searches":1,"searches_with_match":1,"bytes_searched":72276,"bytes_printed":4694,"matched_lines":13,"matches":13}}}
{"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":"scroll"},"start":45,"end":51}]}}
{"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":"scroll"},"start":50,"end":56}]}}
{"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":63166,"human":"0.000063s"},"searches":1,"searches_with_match":1,"bytes_searched":62134,"bytes_printed":806,"matched_lines":2,"matches":2}}}
{"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":"scroll"},"start":11,"end":17}]}}
{"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":29333,"human":"0.000029s"},"searches":1,"searches_with_match":1,"bytes_searched":1802,"bytes_printed":442,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/components/plugin_list.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/components/plugin_list.py"},"lines":{"text":"            fragments.append((\"class:plugin.scroll-hint\", f\"  {UP_ARROW} more above\"))\n"},"line_number":104,"absolute_offset":3186,"submatches":[{"match":{"text":"scroll"},"start":44,"end":50}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/components/plugin_list.py"},"lines":{"text":"            fragments.append((\"class:plugin.scroll-hint\", f\"  {DOWN_ARROW} more below\"))\n"},"line_number":148,"absolute_offset":5088,"submatches":[{"match":{"text":"scroll"},"start":44,"end":50}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/components/plugin_list.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":39216,"human":"0.000039s"},"searches":1,"searches_with_match":1,"bytes_searched":5244,"bytes_printed":893,"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":22,"absolute_offset":709,"submatches":[{"match":{"text":"scroll"},"start":68,"end":74}]}}
{"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":35,"absolute_offset":1261,"submatches":[{"match":{"text":"scroll"},"start":22,"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":"        \"\"\"清屏并重建 scrollback：Logo + 当前会话历史。\"\"\"\n"},"line_number":36,"absolute_offset":1322,"submatches":[{"match":{"text":"scroll"},"start":27,"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":"        self._renderer.reset_history_view()\n"},"line_number":37,"absolute_offset":1394,"submatches":[{"match":{"text":"history_view"},"start":29,"end":41}]}}
{"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":46,"absolute_offset":1749,"submatches":[{"match":{"text":"scroll"},"start":12,"end":18}]}}
{"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":52,"absolute_offset":1984,"submatches":[{"match":{"text":"scroll"},"start":23,"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":"                if not should_show_tool_in_scrollback(tool_name, resume_args, is_result=True, is_error=is_error):\n"},"line_number":151,"absolute_offset":6566,"submatches":[{"match":{"text":"scroll"},"start":43,"end":49}]}}
{"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":308,"absolute_offset":13054,"submatches":[{"match":{"text":"scroll"},"start":12,"end":18}]}}
{"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":313,"absolute_offset":13202,"submatches":[{"match":{"text":"scroll"},"start":37,"end":43}]}}
{"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":96863,"human":"0.000097s"},"searches":1,"searches_with_match":1,"bytes_searched":16144,"bytes_printed":3170,"matched_lines":9,"matches":9}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            self._question_ui.scroll_preview_page(-1)\n"},"line_number":277,"absolute_offset":10076,"submatches":[{"match":{"text":"scroll"},"start":30,"end":36}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            self._question_ui.scroll_preview_page(1)\n"},"line_number":283,"absolute_offset":10296,"submatches":[{"match":{"text":"scroll"},"start":30,"end":36}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            self._question_ui.scroll_preview_half_page(-1)\n"},"line_number":289,"absolute_offset":10513,"submatches":[{"match":{"text":"scroll"},"start":30,"end":36}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            self._question_ui.scroll_preview_half_page(1)\n"},"line_number":295,"absolute_offset":10738,"submatches":[{"match":{"text":"scroll"},"start":30,"end":36}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            self._diff_panel_scroll = 0\n"},"line_number":500,"absolute_offset":18505,"submatches":[{"match":{"text":"scroll"},"start":29,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            self._todo_panel_scroll = 0\n"},"line_number":510,"absolute_offset":18855,"submatches":[{"match":{"text":"scroll"},"start":29,"end":35}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"        def _diff_scroll_up(event) -> None:\n"},"line_number":522,"absolute_offset":19346,"submatches":[{"match":{"text":"scroll"},"start":18,"end":24}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            if self._diff_panel_scroll > 0:\n"},"line_number":524,"absolute_offset":19412,"submatches":[{"match":{"text":"scroll"},"start":32,"end":38}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                self._diff_panel_scroll -= 1\n"},"line_number":525,"absolute_offset":19456,"submatches":[{"match":{"text":"scroll"},"start":33,"end":39}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"        def _diff_scroll_down(event) -> None:\n"},"line_number":529,"absolute_offset":19605,"submatches":[{"match":{"text":"scroll"},"start":18,"end":24}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                max_scroll = max(\n"},"line_number":533,"absolute_offset":19758,"submatches":[{"match":{"text":"scroll"},"start":20,"end":26}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                if self._diff_panel_scroll < max_scroll:\n"},"line_number":536,"absolute_offset":19886,"submatches":[{"match":{"text":"scroll"},"start":36,"end":42},{"match":{"text":"scroll"},"start":49,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                    self._diff_panel_scroll += 1\n"},"line_number":537,"absolute_offset":19943,"submatches":[{"match":{"text":"scroll"},"start":37,"end":43}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"        def _todo_scroll_up(event) -> None:\n"},"line_number":541,"absolute_offset":20102,"submatches":[{"match":{"text":"scroll"},"start":18,"end":24}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            if self._todo_panel_scroll > 0:\n"},"line_number":543,"absolute_offset":20168,"submatches":[{"match":{"text":"scroll"},"start":32,"end":38}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                self._todo_panel_scroll -= 1\n"},"line_number":544,"absolute_offset":20212,"submatches":[{"match":{"text":"scroll"},"start":33,"end":39}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"        def _todo_scroll_down(event) -> None:\n"},"line_number":548,"absolute_offset":20365,"submatches":[{"match":{"text":"scroll"},"start":18,"end":24}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            max_scroll = max(0, total_items - visible_item_slots)\n"},"line_number":559,"absolute_offset":20849,"submatches":[{"match":{"text":"scroll"},"start":16,"end":22}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            if self._todo_panel_scroll < max_scroll:\n"},"line_number":560,"absolute_offset":20915,"submatches":[{"match":{"text":"scroll"},"start":32,"end":38},{"match":{"text":"scroll"},"start":45,"end":51}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                self._todo_panel_scroll += 1\n"},"line_number":561,"absolute_offset":20968,"submatches":[{"match":{"text":"scroll"},"start":33,"end":39}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":116053,"human":"0.000116s"},"searches":1,"searches_with_match":1,"bytes_searched":21073,"bytes_printed":6627,"matched_lines":20,"matches":22}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        self._todo_panel_scroll = 0\n"},"line_number":314,"absolute_offset":12099,"submatches":[{"match":{"text":"scroll"},"start":25,"end":31}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        max_scroll = max(0, total_items - visible_item_slots)\n"},"line_number":344,"absolute_offset":13273,"submatches":[{"match":{"text":"scroll"},"start":12,"end":18}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        offset = min(max(int(self._todo_panel_scroll), 0), max_scroll)\n"},"line_number":345,"absolute_offset":13335,"submatches":[{"match":{"text":"scroll"},"start":46,"end":52},{"match":{"text":"scroll"},"start":63,"end":69}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        self._todo_panel_scroll = offset\n"},"line_number":346,"absolute_offset":13406,"submatches":[{"match":{"text":"scroll"},"start":25,"end":31}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"            f\"Ctrl+Y collapse, {UP_ARROW}{DOWN_ARROW} scroll\"\n"},"line_number":354,"absolute_offset":13705,"submatches":[{"match":{"text":"scroll"},"start":54,"end":60}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        offset = self._diff_panel_scroll\n"},"line_number":597,"absolute_offset":23937,"submatches":[{"match":{"text":"scroll"},"start":34,"end":40}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        max_scroll = max(0, total - viewport)\n"},"line_number":598,"absolute_offset":23978,"submatches":[{"match":{"text":"scroll"},"start":12,"end":18}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        scroll_info = \"\"\n"},"line_number":599,"absolute_offset":24024,"submatches":[{"match":{"text":"scroll"},"start":8,"end":14}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"            scroll_info = f\" [{offset + 1}-{min(offset + viewport, total)}/{total}] {UP_ARROW}{DOWN_ARROW}\"\n"},"line_number":601,"absolute_offset":24078,"submatches":[{"match":{"text":"scroll"},"start":12,"end":18}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"            f\" Diff Preview (Ctrl+O to close, use arrow keys ({UP_ARROW}{DOWN_ARROW}) to scroll) \"\n"},"line_number":604,"absolute_offset":24205,"submatches":[{"match":{"text":"scroll"},"start":89,"end":95}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"            f\"{scroll_info} \"\n"},"line_number":605,"absolute_offset":24304,"submatches":[{"match":{"text":"scroll"},"start":15,"end":21}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":102463,"human":"0.000102s"},"searches":1,"searches_with_match":1,"bytes_searched":33340,"bytes_printed":3816,"matched_lines":11,"matches":12}}}
{"data":{"elapsed_total":{"human":"0.015098s","nanos":15098398,"secs":0},"stats":{"bytes_printed":35754,"bytes_searched":407254,"elapsed":{"human":"0.001394s","nanos":1393947,"secs":0},"matched_lines":101,"matches":107,"searches":16,"searches_with_match":16}},"type":"summary"}
