{"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":46333,"human":"0.000046s"},"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/transcript_viewer.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"    scroll: int | None = None\n"},"line_number":53,"absolute_offset":1559,"submatches":[{"match":{"text":"scroll"},"start":4,"end":10}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"            \"Showing detailed transcript · ctrl+o/q close · ↑↓ scroll · PgUp/PgDn page · home/end top/bottom\",\n"},"line_number":155,"absolute_offset":4796,"submatches":[{"match":{"text":"scroll"},"start":69,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"def _resolve_scroll(state: _TranscriptState, *, total_lines: int, body_height: int) -> int:\n"},"line_number":262,"absolute_offset":8898,"submatches":[{"match":{"text":"scroll"},"start":13,"end":19}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"    max_scroll = max(0, total_lines - body_height)\n"},"line_number":263,"absolute_offset":8990,"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/transcript_viewer.py"},"lines":{"text":"    if state.scroll is None:\n"},"line_number":264,"absolute_offset":9041,"submatches":[{"match":{"text":"scroll"},"start":13,"end":19}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"        return max_scroll\n"},"line_number":265,"absolute_offset":9070,"submatches":[{"match":{"text":"scroll"},"start":19,"end":25}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"    state.scroll = max(0, min(state.scroll, max_scroll))\n"},"line_number":266,"absolute_offset":9096,"submatches":[{"match":{"text":"scroll"},"start":10,"end":16},{"match":{"text":"scroll"},"start":36,"end":42},{"match":{"text":"scroll"},"start":48,"end":54}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"    return state.scroll\n"},"line_number":267,"absolute_offset":9153,"submatches":[{"match":{"text":"scroll"},"start":17,"end":23}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"    start = _resolve_scroll(state, total_lines=len(lines), body_height=height)\n"},"line_number":273,"absolute_offset":9396,"submatches":[{"match":{"text":"scroll"},"start":21,"end":27}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"    def _ensure_scroll() -> int:\n"},"line_number":281,"absolute_offset":9646,"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/transcript_viewer.py"},"lines":{"text":"        if state.scroll is None:\n"},"line_number":282,"absolute_offset":9679,"submatches":[{"match":{"text":"scroll"},"start":17,"end":23}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"            state.scroll = max(0, len(_build_transcript_lines(state)) - _terminal_body_height())\n"},"line_number":283,"absolute_offset":9712,"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/transcript_viewer.py"},"lines":{"text":"        return state.scroll\n"},"line_number":284,"absolute_offset":9809,"submatches":[{"match":{"text":"scroll"},"start":21,"end":27}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"        state.scroll = max(0, _ensure_scroll() - 1)\n"},"line_number":290,"absolute_offset":9934,"submatches":[{"match":{"text":"scroll"},"start":14,"end":20},{"match":{"text":"scroll"},"start":38,"end":44}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"        state.scroll = _ensure_scroll() + 1\n"},"line_number":296,"absolute_offset":10087,"submatches":[{"match":{"text":"scroll"},"start":14,"end":20},{"match":{"text":"scroll"},"start":31,"end":37}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"        state.scroll = max(0, _ensure_scroll() - _PAGE_SIZE)\n"},"line_number":302,"absolute_offset":10239,"submatches":[{"match":{"text":"scroll"},"start":14,"end":20},{"match":{"text":"scroll"},"start":38,"end":44}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"        state.scroll = _ensure_scroll() + _PAGE_SIZE\n"},"line_number":308,"absolute_offset":10412,"submatches":[{"match":{"text":"scroll"},"start":14,"end":20},{"match":{"text":"scroll"},"start":31,"end":37}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"        state.scroll = 0\n"},"line_number":314,"absolute_offset":10566,"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/transcript_viewer.py"},"lines":{"text":"        state.scroll = None\n"},"line_number":320,"absolute_offset":10690,"submatches":[{"match":{"text":"scroll"},"start":14,"end":20}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":151423,"human":"0.000151s"},"searches":1,"searches_with_match":1,"bytes_searched":12048,"bytes_printed":6428,"matched_lines":19,"matches":25}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/slash_commands.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/slash_commands.py"},"lines":{"text":"    def get_suggestion(self, _buffer, document: Document) -> Suggestion | None:\n"},"line_number":237,"absolute_offset":7193,"submatches":[{"match":{"text":"buffer"},"start":30,"end":36}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/slash_commands.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":24880,"human":"0.000025s"},"searches":1,"searches_with_match":1,"bytes_searched":7928,"bytes_printed":479,"matched_lines":1,"matches":1}}}
{"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":"buffer"},"start":46,"end":52},{"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":28798,"human":"0.000029s"},"searches":1,"searches_with_match":1,"bytes_searched":7779,"bytes_printed":535,"matched_lines":1,"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":122528,"human":"0.000123s"},"searches":1,"searches_with_match":1,"bytes_searched":29738,"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/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":"scroll"},"start":4,"end":10}]}}
{"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":69798,"human":"0.000070s"},"searches":1,"searches_with_match":1,"bytes_searched":26610,"bytes_printed":499,"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._todo_panel_scroll = 0\n"},"line_number":245,"absolute_offset":9021,"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._input_area.buffer.on_text_changed.add_handler\n"},"line_number":324,"absolute_offset":12421,"submatches":[{"match":{"text":"buffer"},"start":26,"end":32}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        def _trigger_completion(_buffer) -> None:\n"},"line_number":325,"absolute_offset":12482,"submatches":[{"match":{"text":"buffer"},"start":33,"end":39}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"            if self._handle_large_paste(_buffer):\n"},"line_number":326,"absolute_offset":12532,"submatches":[{"match":{"text":"buffer"},"start":41,"end":47}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"            doc = self._input_area.buffer.document\n"},"line_number":330,"absolute_offset":12655,"submatches":[{"match":{"text":"buffer"},"start":35,"end":41}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"                self._input_area.buffer.start_completion(select_first=False)\n"},"line_number":336,"absolute_offset":12924,"submatches":[{"match":{"text":"buffer"},"start":33,"end":39}]}}
{"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":"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":535,"absolute_offset":21754,"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":583,"absolute_offset":23956,"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":843,"absolute_offset":33865,"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":1076,"absolute_offset":44929,"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":1384,"absolute_offset":57431,"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":1508,"absolute_offset":62186,"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":1555,"absolute_offset":63637,"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":235934,"human":"0.000236s"},"searches":1,"searches_with_match":1,"bytes_searched":72168,"bytes_printed":4671,"matched_lines":14,"matches":14}}}
{"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":42255,"human":"0.000042s"},"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/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":19737,"human":"0.000020s"},"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/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":32517,"human":"0.000033s"},"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/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":278,"absolute_offset":9224,"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":31671,"human":"0.000032s"},"searches":1,"searches_with_match":1,"bytes_searched":12183,"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/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":"scroll"},"start":4,"end":10}]}}
{"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":"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":"        self._assistant_buffer = \"\"\n"},"line_number":262,"absolute_offset":8082,"submatches":[{"match":{"text":"buffer"},"start":24,"end":30}]}}
{"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":"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":534,"absolute_offset":20267,"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":552,"absolute_offset":20959,"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":611,"absolute_offset":23362,"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":673,"absolute_offset":25835,"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":"        self._assistant_buffer = \"\"\n"},"line_number":711,"absolute_offset":27234,"submatches":[{"match":{"text":"buffer"},"start":24,"end":30}]}}
{"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":"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":"        \"\"\"Drain pending log，按 log_subtype 决定是否写入 scrollback。\"\"\"\n"},"line_number":827,"absolute_offset":31371,"submatches":[{"match":{"text":"scroll"},"start":66,"end":72}]}}
{"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":"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":"        if not self._assistant_buffer:\n"},"line_number":1040,"absolute_offset":39846,"submatches":[{"match":{"text":"buffer"},"start":31,"end":37}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"            HistoryEntry(entry_type=\"assistant\", text=self._assistant_buffer)\n"},"line_number":1043,"absolute_offset":39940,"submatches":[{"match":{"text":"buffer"},"start":70,"end":76}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        self._assistant_buffer = \"\"\n"},"line_number":1045,"absolute_offset":40028,"submatches":[{"match":{"text":"buffer"},"start":24,"end":30}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        self._assistant_buffer += text\n"},"line_number":1049,"absolute_offset":40156,"submatches":[{"match":{"text":"buffer"},"start":24,"end":30}]}}
{"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":"scroll"},"start":29,"end":35}]}}
{"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":"scroll"},"start":25,"end":31}]}}
{"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":"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":1422,"absolute_offset":55846,"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":1428,"absolute_offset":56306,"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":1555,"absolute_offset":62625,"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":178179,"human":"0.000178s"},"searches":1,"searches_with_match":1,"bytes_searched":64645,"bytes_printed":7502,"matched_lines":22,"matches":22}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    \"\"\"Buffer 为空时在 TextArea 内显示灰色占位文字。占位符不能含换行符。\"\"\"\n"},"line_number":31,"absolute_offset":929,"submatches":[{"match":{"text":"Buffer"},"start":7,"end":13}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"            # Buffer is empty: replace with placeholder. Length invariant is\n"},"line_number":38,"absolute_offset":1233,"submatches":[{"match":{"text":"Buffer"},"start":14,"end":20}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"        @self._search_area.buffer.on_text_changed.add_handler\n"},"line_number":166,"absolute_offset":5321,"submatches":[{"match":{"text":"buffer"},"start":27,"end":33}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"        def _sync_search(buffer) -> None:  # type: ignore[no-untyped-def]\n"},"line_number":167,"absolute_offset":5383,"submatches":[{"match":{"text":"buffer"},"start":25,"end":31}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"            self._ui_state.search_query = buffer.text\n"},"line_number":168,"absolute_offset":5457,"submatches":[{"match":{"text":"buffer"},"start":42,"end":48}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"                tab.apply_filter(buffer.text)\n"},"line_number":171,"absolute_offset":5593,"submatches":[{"match":{"text":"buffer"},"start":33,"end":39}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"        \"\"\"将字符注入搜索框 buffer 末尾。供 key_bindings 焦点转移时调用。\"\"\"\n"},"line_number":226,"absolute_offset":7636,"submatches":[{"match":{"text":"buffer"},"start":36,"end":42}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"        self._search_area.buffer.insert_text(char)\n"},"line_number":227,"absolute_offset":7733,"submatches":[{"match":{"text":"buffer"},"start":26,"end":32}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"            self._search_area.buffer.document = Document(text=\"\", cursor_position=0)\n"},"line_number":426,"absolute_offset":14650,"submatches":[{"match":{"text":"buffer"},"start":30,"end":36}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":74768,"human":"0.000075s"},"searches":1,"searches_with_match":1,"bytes_searched":14877,"bytes_printed":3222,"matched_lines":9,"matches":9}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_result_viewer.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_result_viewer.py"},"lines":{"text":"    detail_scroll: int = 0\n"},"line_number":36,"absolute_offset":978,"submatches":[{"match":{"text":"scroll"},"start":11,"end":17}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_result_viewer.py"},"lines":{"text":"    if state.detail_scroll <= 0:\n"},"line_number":113,"absolute_offset":3865,"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/tool_result_viewer.py"},"lines":{"text":"    clipped = \"\\n\".join(text.splitlines()[state.detail_scroll:])\n"},"line_number":116,"absolute_offset":3973,"submatches":[{"match":{"text":"scroll"},"start":55,"end":61}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_result_viewer.py"},"lines":{"text":"        return [(\"class:footer\", \"↑↓ scroll · q/esc back · Q/ctrl+o/c-c close\")]\n"},"line_number":128,"absolute_offset":4336,"submatches":[{"match":{"text":"scroll"},"start":41,"end":47}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_result_viewer.py"},"lines":{"text":"            state.detail_scroll = max(0, state.detail_scroll - 1)\n"},"line_number":140,"absolute_offset":4728,"submatches":[{"match":{"text":"scroll"},"start":25,"end":31},{"match":{"text":"scroll"},"start":54,"end":60}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_result_viewer.py"},"lines":{"text":"            state.detail_scroll += 1\n"},"line_number":149,"absolute_offset":5013,"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/tool_result_viewer.py"},"lines":{"text":"            state.detail_scroll = 0\n"},"line_number":158,"absolute_offset":5319,"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/tool_result_viewer.py"},"lines":{"text":"            state.detail_scroll = 0\n"},"line_number":165,"absolute_offset":5516,"submatches":[{"match":{"text":"scroll"},"start":25,"end":31}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_result_viewer.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":49179,"human":"0.000049s"},"searches":1,"searches_with_match":1,"bytes_searched":6780,"bytes_printed":2709,"matched_lines":8,"matches":9}}}
{"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":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        buffer = self._input_area.buffer\n"},"line_number":1539,"absolute_offset":55045,"submatches":[{"match":{"text":"buffer"},"start":8,"end":14},{"match":{"text":"buffer"},"start":34,"end":40}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        buffer.cancel_completion()\n"},"line_number":1540,"absolute_offset":55086,"submatches":[{"match":{"text":"buffer"},"start":8,"end":14}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"            buffer.set_document(\n"},"line_number":1543,"absolute_offset":55182,"submatches":[{"match":{"text":"buffer"},"start":12,"end":18}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"            f\"(est={next_step_estimated_tokens:,}, limit={context_limit:,}; includes buffer)\"\n"},"line_number":1650,"absolute_offset":59620,"submatches":[{"match":{"text":"buffer"},"start":85,"end":91}]}}
{"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":121376,"human":"0.000121s"},"searches":1,"searches_with_match":1,"bytes_searched":62134,"bytes_printed":2129,"matched_lines":6,"matches":7}}}
{"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":"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":36,"absolute_offset":1349,"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":37,"absolute_offset":1410,"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":"            scrollback_console = Console(\n"},"line_number":47,"absolute_offset":1837,"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":53,"absolute_offset":2072,"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":152,"absolute_offset":6654,"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":309,"absolute_offset":13133,"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":314,"absolute_offset":13281,"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":87235,"human":"0.000087s"},"searches":1,"searches_with_match":1,"bytes_searched":16223,"bytes_printed":2851,"matched_lines":8,"matches":8}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        buffer = self._input_area.buffer\n"},"line_number":27,"absolute_offset":816,"submatches":[{"match":{"text":"buffer"},"start":8,"end":14},{"match":{"text":"buffer"},"start":34,"end":40}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        if buffer.complete_state is not None and buffer.complete_state.completions:\n"},"line_number":30,"absolute_offset":921,"submatches":[{"match":{"text":"buffer"},"start":11,"end":17},{"match":{"text":"buffer"},"start":49,"end":55}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        document = buffer.document\n"},"line_number":34,"absolute_offset":1110,"submatches":[{"match":{"text":"buffer"},"start":19,"end":25}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"    def _move_completion_selection(self, buffer: Any, *, backward: bool) -> bool:\n"},"line_number":78,"absolute_offset":2661,"submatches":[{"match":{"text":"buffer"},"start":41,"end":47}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"            buffer: 当前的 Buffer 对象\n"},"line_number":87,"absolute_offset":3066,"submatches":[{"match":{"text":"buffer"},"start":12,"end":18},{"match":{"text":"Buffer"},"start":30,"end":36}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        complete_state = buffer.complete_state\n"},"line_number":93,"absolute_offset":3278,"submatches":[{"match":{"text":"buffer"},"start":25,"end":31}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"                buffer.complete_previous()\n"},"line_number":98,"absolute_offset":3474,"submatches":[{"match":{"text":"buffer"},"start":16,"end":22}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"                buffer.complete_next()\n"},"line_number":100,"absolute_offset":3535,"submatches":[{"match":{"text":"buffer"},"start":16,"end":22}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        document = buffer.document\n"},"line_number":104,"absolute_offset":3658,"submatches":[{"match":{"text":"buffer"},"start":19,"end":25}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"            buffer.start_completion(select_first=True)\n"},"line_number":110,"absolute_offset":3906,"submatches":[{"match":{"text":"buffer"},"start":12,"end":18}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        buffer = self._input_area.buffer\n"},"line_number":173,"absolute_offset":6309,"submatches":[{"match":{"text":"buffer"},"start":8,"end":14},{"match":{"text":"buffer"},"start":34,"end":40}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        buffer.cancel_completion()\n"},"line_number":174,"absolute_offset":6350,"submatches":[{"match":{"text":"buffer"},"start":8,"end":14}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"                buffer.reset(\n"},"line_number":178,"absolute_offset":6478,"submatches":[{"match":{"text":"buffer"},"start":16,"end":22}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"                buffer.set_document(\n"},"line_number":182,"absolute_offset":6620,"submatches":[{"match":{"text":"buffer"},"start":16,"end":22}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"    def _handle_large_paste(self, buffer: Any) -> bool:\n"},"line_number":239,"absolute_offset":8733,"submatches":[{"match":{"text":"buffer"},"start":34,"end":40}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        text = str(buffer.text)\n"},"line_number":245,"absolute_offset":8908,"submatches":[{"match":{"text":"buffer"},"start":19,"end":25}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"            buffer.cancel_completion()\n"},"line_number":277,"absolute_offset":10085,"submatches":[{"match":{"text":"buffer"},"start":12,"end":18}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"            buffer.set_document(\n"},"line_number":278,"absolute_offset":10124,"submatches":[{"match":{"text":"buffer"},"start":12,"end":18}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"    def _move_cursor_visual(self, buffer: Any, *, backward: bool) -> bool:\n"},"line_number":290,"absolute_offset":10515,"submatches":[{"match":{"text":"buffer"},"start":34,"end":40}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        text = str(buffer.text)\n"},"line_number":291,"absolute_offset":10590,"submatches":[{"match":{"text":"buffer"},"start":19,"end":25}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        cursor_index = int(buffer.cursor_position)\n"},"line_number":301,"absolute_offset":10892,"submatches":[{"match":{"text":"buffer"},"start":27,"end":33}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        buffer.cursor_position = target_index\n"},"line_number":322,"absolute_offset":11573,"submatches":[{"match":{"text":"buffer"},"start":8,"end":14}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"        if self._input_area.buffer.complete_state is not None:\n"},"line_number":334,"absolute_offset":11915,"submatches":[{"match":{"text":"buffer"},"start":28,"end":34}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"            self._input_area.buffer.cancel_completion()\n"},"line_number":335,"absolute_offset":11978,"submatches":[{"match":{"text":"buffer"},"start":29,"end":35}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":120082,"human":"0.000120s"},"searches":1,"searches_with_match":1,"bytes_searched":14278,"bytes_printed":7993,"matched_lines":24,"matches":28}}}
{"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":"        buffer = getattr(input_area, \"buffer\", None)\n"},"line_number":179,"absolute_offset":6261,"submatches":[{"match":{"text":"buffer"},"start":8,"end":14},{"match":{"text":"buffer"},"start":38,"end":44}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        if buffer is None:\n"},"line_number":180,"absolute_offset":6314,"submatches":[{"match":{"text":"buffer"},"start":11,"end":17}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        complete_state = getattr(buffer, \"complete_state\", None)\n"},"line_number":182,"absolute_offset":6365,"submatches":[{"match":{"text":"buffer"},"start":33,"end":39}]}}
{"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":"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":107609,"human":"0.000108s"},"searches":1,"searches_with_match":1,"bytes_searched":29465,"bytes_printed":2837,"matched_lines":8,"matches":10}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/components/search_box.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/components/search_box.py"},"lines":{"text":"        self._text_area.buffer.on_text_changed += self._handle_change\n"},"line_number":29,"absolute_offset":725,"submatches":[{"match":{"text":"buffer"},"start":24,"end":30}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/components/search_box.py"},"lines":{"text":"    def _handle_change(self, _buffer: object) -> None:\n"},"line_number":48,"absolute_offset":1208,"submatches":[{"match":{"text":"buffer"},"start":30,"end":36}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/components/search_box.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":19672,"human":"0.000020s"},"searches":1,"searches_with_match":1,"bytes_searched":1341,"bytes_printed":828,"matched_lines":2,"matches":2}}}
{"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":28983,"human":"0.000029s"},"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/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._custom_input_area.buffer.on_text_changed.add_handler\n"},"line_number":95,"absolute_offset":2722,"submatches":[{"match":{"text":"buffer"},"start":33,"end":39}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        def _sync_custom_input(buffer) -> None:\n"},"line_number":96,"absolute_offset":2790,"submatches":[{"match":{"text":"buffer"},"start":31,"end":37}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"            question.custom_input = buffer.text\n"},"line_number":100,"absolute_offset":2941,"submatches":[{"match":{"text":"buffer"},"start":36,"end":42}]}}
{"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._sync_custom_input_buffer()\n"},"line_number":253,"absolute_offset":9064,"submatches":[{"match":{"text":"buffer"},"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":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._sync_custom_input_buffer()\n"},"line_number":259,"absolute_offset":9255,"submatches":[{"match":{"text":"buffer"},"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":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._sync_custom_input_buffer()\n"},"line_number":337,"absolute_offset":11934,"submatches":[{"match":{"text":"buffer"},"start":40,"end":46}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"            self._custom_input_area.buffer.document = Document(text=text, cursor_position=len(text))\n"},"line_number":350,"absolute_offset":12506,"submatches":[{"match":{"text":"buffer"},"start":36,"end":42}]}}
{"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._sync_custom_input_buffer()\n"},"line_number":379,"absolute_offset":13666,"submatches":[{"match":{"text":"buffer"},"start":40,"end":46}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"                self._sync_custom_input_buffer()\n"},"line_number":397,"absolute_offset":14388,"submatches":[{"match":{"text":"buffer"},"start":40,"end":46}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"                self._sync_custom_input_buffer()\n"},"line_number":410,"absolute_offset":14862,"submatches":[{"match":{"text":"buffer"},"start":40,"end":46}]}}
{"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":"        self._sync_custom_input_buffer()\n"},"line_number":450,"absolute_offset":16365,"submatches":[{"match":{"text":"buffer"},"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._sync_custom_input_buffer()\n"},"line_number":457,"absolute_offset":16684,"submatches":[{"match":{"text":"buffer"},"start":36,"end":42}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"    def _sync_custom_input_buffer(self) -> None:\n"},"line_number":508,"absolute_offset":18600,"submatches":[{"match":{"text":"buffer"},"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":"                self._custom_input_area.buffer.document = Document(text=\"\", cursor_position=0)\n"},"line_number":512,"absolute_offset":18766,"submatches":[{"match":{"text":"buffer"},"start":40,"end":46}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/question_view.py"},"lines":{"text":"        self._custom_input_area.buffer.document = Document(text=text, cursor_position=len(text))\n"},"line_number":517,"absolute_offset":18985,"submatches":[{"match":{"text":"buffer"},"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":219320,"human":"0.000219s"},"searches":1,"searches_with_match":1,"bytes_searched":26363,"bytes_printed":11311,"matched_lines":35,"matches":38}}}
{"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":"    def _pop_human_queue_to_input(self, buffer) -> bool:  # type: ignore[no-untyped-def]\n"},"line_number":38,"absolute_offset":1220,"submatches":[{"match":{"text":"buffer"},"start":40,"end":46}]}}
{"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 str(getattr(buffer, \"text\", \"\") or \"\").strip():\n"},"line_number":39,"absolute_offset":1309,"submatches":[{"match":{"text":"buffer"},"start":23,"end":29}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"        buffer.text = text\n"},"line_number":75,"absolute_offset":2749,"submatches":[{"match":{"text":"buffer"},"start":8,"end":14}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"        buffer.cursor_position = len(text)\n"},"line_number":76,"absolute_offset":2776,"submatches":[{"match":{"text":"buffer"},"start":8,"end":14}]}}
{"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":298,"absolute_offset":10786,"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":304,"absolute_offset":11006,"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":310,"absolute_offset":11223,"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":316,"absolute_offset":11448,"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":"            buffer = event.current_buffer\n"},"line_number":364,"absolute_offset":13085,"submatches":[{"match":{"text":"buffer"},"start":12,"end":18},{"match":{"text":"buffer"},"start":35,"end":41}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            cs = buffer.complete_state\n"},"line_number":365,"absolute_offset":13127,"submatches":[{"match":{"text":"buffer"},"start":17,"end":23}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                buffer.apply_completion(completion)\n"},"line_number":370,"absolute_offset":13337,"submatches":[{"match":{"text":"buffer"},"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":"                buffer.cancel_completion()\n"},"line_number":371,"absolute_offset":13389,"submatches":[{"match":{"text":"buffer"},"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":"                text_now = buffer.text\n"},"line_number":374,"absolute_offset":13532,"submatches":[{"match":{"text":"buffer"},"start":27,"end":33}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                doc_now = buffer.document\n"},"line_number":375,"absolute_offset":13571,"submatches":[{"match":{"text":"buffer"},"start":26,"end":32}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            buffer = event.current_buffer\n"},"line_number":392,"absolute_offset":14151,"submatches":[{"match":{"text":"buffer"},"start":12,"end":18},{"match":{"text":"buffer"},"start":35,"end":41}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            cs = buffer.complete_state\n"},"line_number":393,"absolute_offset":14193,"submatches":[{"match":{"text":"buffer"},"start":17,"end":23}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                buffer.apply_completion(completion)\n"},"line_number":397,"absolute_offset":14427,"submatches":[{"match":{"text":"buffer"},"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":"                buffer.cancel_completion()\n"},"line_number":398,"absolute_offset":14479,"submatches":[{"match":{"text":"buffer"},"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":"            buffer.start_completion(select_first=False)\n"},"line_number":401,"absolute_offset":14584,"submatches":[{"match":{"text":"buffer"},"start":12,"end":18}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            event.current_buffer.complete_previous()\n"},"line_number":405,"absolute_offset":14751,"submatches":[{"match":{"text":"buffer"},"start":26,"end":32}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"            buffer = event.current_buffer\n"},"line_number":414,"absolute_offset":15090,"submatches":[{"match":{"text":"buffer"},"start":12,"end":18},{"match":{"text":"buffer"},"start":35,"end":41}]}}
{"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._move_completion_selection(buffer, backward=True):\n"},"line_number":415,"absolute_offset":15132,"submatches":[{"match":{"text":"buffer"},"start":47,"end":53}]}}
{"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._move_cursor_visual(buffer, backward=True):\n"},"line_number":417,"absolute_offset":15226,"submatches":[{"match":{"text":"buffer"},"start":40,"end":46}]}}
{"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._pop_human_queue_to_input(buffer):\n"},"line_number":420,"absolute_offset":15348,"submatches":[{"match":{"text":"buffer"},"start":46,"end":52}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                buffer.auto_up(count=1)\n"},"line_number":423,"absolute_offset":15472,"submatches":[{"match":{"text":"buffer"},"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":"            buffer = event.current_buffer\n"},"line_number":427,"absolute_offset":15632,"submatches":[{"match":{"text":"buffer"},"start":12,"end":18},{"match":{"text":"buffer"},"start":35,"end":41}]}}
{"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._move_completion_selection(buffer, backward=False):\n"},"line_number":428,"absolute_offset":15674,"submatches":[{"match":{"text":"buffer"},"start":47,"end":53}]}}
{"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._move_cursor_visual(buffer, backward=False):\n"},"line_number":430,"absolute_offset":15769,"submatches":[{"match":{"text":"buffer"},"start":40,"end":46}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                buffer.auto_down(count=1)\n"},"line_number":434,"absolute_offset":15938,"submatches":[{"match":{"text":"buffer"},"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":"            buffer = event.current_buffer\n"},"line_number":438,"absolute_offset":16066,"submatches":[{"match":{"text":"buffer"},"start":12,"end":18},{"match":{"text":"buffer"},"start":35,"end":41}]}}
{"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 buffer.complete_state is not None:\n"},"line_number":440,"absolute_offset":16143,"submatches":[{"match":{"text":"buffer"},"start":15,"end":21}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/key_bindings.py"},"lines":{"text":"                buffer.cancel_completion()\n"},"line_number":441,"absolute_offset":16193,"submatches":[{"match":{"text":"buffer"},"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._pop_human_queue_to_input(buffer):\n"},"line_number":458,"absolute_offset":16798,"submatches":[{"match":{"text":"buffer"},"start":46,"end":52}]}}
{"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":540,"absolute_offset":19931,"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 _todo_scroll_up(event) -> None:\n"},"line_number":552,"absolute_offset":20426,"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":554,"absolute_offset":20492,"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":555,"absolute_offset":20536,"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":559,"absolute_offset":20689,"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":570,"absolute_offset":21173,"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":571,"absolute_offset":21239,"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":572,"absolute_offset":21292,"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":195676,"human":"0.000196s"},"searches":1,"searches_with_match":1,"bytes_searched":21397,"bytes_printed":13590,"matched_lines":41,"matches":47}}}
{"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":45286,"human":"0.000045s"},"searches":1,"searches_with_match":1,"bytes_searched":18416,"bytes_printed":878,"matched_lines":2,"matches":2}}}
{"data":{"elapsed_total":{"human":"0.019122s","nanos":19122467,"secs":0},"stats":{"bytes_printed":73813,"bytes_searched":479307,"elapsed":{"human":"0.002053s","nanos":2053239,"secs":0},"matched_lines":214,"matches":238,"searches":23,"searches_with_match":23}},"type":"summary"}
