{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/main.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/main.py"},"lines":{"text":"# 进程启动锚点：在任何重三方库 import（anthropic/prompt_toolkit/rich）之前捕获，\n"},"line_number":14,"absolute_offset":187,"submatches":[{"match":{"text":"# 进程启动锚点：在任何重三方库 import（anthropic/prompt_toolkit/rich）之前捕获，"},"start":0,"end":101}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/main.py"},"lines":{"text":"# 交给 StartupProfiler 测量「run() 之前的 import」这段以往不可见的启动成本。\n"},"line_number":15,"absolute_offset":289,"submatches":[{"match":{"text":"# 交给 StartupProfiler 测量「run() 之前的 import」这段以往不可见的启动成本。"},"start":0,"end":98}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/main.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":36770,"human":"0.000037s"},"searches":1,"searches_with_match":1,"bytes_searched":15404,"bytes_printed":969,"matched_lines":2,"matches":2}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logo.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logo.py"},"lines":{"text":"# Mirrors opencode's marker grammar: \"_\" is a shadow cell, \"^\" is\n"},"line_number":20,"absolute_offset":464,"submatches":[{"match":{"text":"# Mirrors opencode's marker grammar: \"_\" is a shadow cell, \"^\" is"},"start":0,"end":65}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logo.py"},"lines":{"text":"# letter-top/shadow-bottom, and \"~\"/\",\" are shadow half-cells.\n"},"line_number":21,"absolute_offset":530,"submatches":[{"match":{"text":"# letter-top/shadow-bottom, and \"~\"/\",\" are shadow half-cells."},"start":0,"end":62}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logo.py"},"lines":{"text":"# \";\" is the mirror of \"^\": ink-bottom/shadow-top (▄ ink + shadow above),\n"},"line_number":22,"absolute_offset":593,"submatches":[{"match":{"text":"# \";\" is the mirror of \"^\": ink-bottom/shadow-top (▄ ink + shadow above),"},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logo.py"},"lines":{"text":"# used to shadow the top of a stroke that sinks into a lower half-cell.\n"},"line_number":23,"absolute_offset":669,"submatches":[{"match":{"text":"# used to shadow the top of a stroke that sinks into a lower half-cell."},"start":0,"end":71}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logo.py"},"lines":{"text":"# nico —— comate 吉祥物：青色方头 + 右侧空白眼孔（透出终端背景，望着 comate），立在 co 左边。\n"},"line_number":36,"absolute_offset":1205,"submatches":[{"match":{"text":"# nico —— comate 吉祥物：青色方头 + 右侧空白眼孔（透出终端背景，望着 comate），立在 co 左边。"},"start":0,"end":128}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logo.py"},"lines":{"text":"# 方角版只用 █ ▀ 空格，无需新 marker / scaler；设计稿见 tools/nico_preview.py。\n"},"line_number":37,"absolute_offset":1334,"submatches":[{"match":{"text":"# 方角版只用 █ ▀ 空格，无需新 marker / scaler；设计稿见 tools/nico_preview.py。"},"start":0,"end":100}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logo.py"},"lines":{"text":"# --- 2x 放大 -----------------------------------------------------------------\n"},"line_number":76,"absolute_offset":2412,"submatches":[{"match":{"text":"# --- 2x 放大 -----------------------------------------------------------------"},"start":0,"end":81}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logo.py"},"lines":{"text":"# 每个 marker 本质是 (上像素, 下像素)，像素 ∈ {空 e, 墨 i, 影 s}。2x 最近邻放大即\n"},"line_number":77,"absolute_offset":2494,"submatches":[{"match":{"text":"# 每个 marker 本质是 (上像素, 下像素)，像素 ∈ {空 e, 墨 i, 影 s}。2x 最近邻放大即"},"start":0,"end":107}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logo.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":72598,"human":"0.000073s"},"searches":1,"searches_with_match":1,"bytes_searched":9722,"bytes_printed":3488,"matched_lines":8,"matches":8}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/mention_completer.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/mention_completer.py"},"lines":{"text":"        # `-c core.quotepath=false`: git 默认会把非 ASCII 字节转义成 \\nnn 形式，\n"},"line_number":382,"absolute_offset":12943,"submatches":[{"match":{"text":"        # `-c core.quotepath=false`: git 默认会把非 ASCII 字节转义成 \\nnn 形式，"},"start":0,"end":93}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/mention_completer.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":19187,"human":"0.000019s"},"searches":1,"searches_with_match":1,"bytes_searched":22750,"bytes_printed":588,"matched_lines":1,"matches":1}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/path_context_hint.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/path_context_hint.py"},"lines":{"text":"                # Not found — only include if path looks like a filesystem path\n"},"line_number":44,"absolute_offset":1442,"submatches":[{"match":{"text":"                # Not found — only include if path looks like a filesystem path"},"start":0,"end":81}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/path_context_hint.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":8452,"human":"0.000008s"},"searches":1,"searches_with_match":1,"bytes_searched":3205,"bytes_printed":560,"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":"# viewer 的语义是 \"展开 tool 调用\"，因此只渲染 user 锚点 + tool_result + tool_fold；\n"},"line_number":30,"absolute_offset":1030,"submatches":[{"match":{"text":"# viewer 的语义是 \"展开 tool 调用\"，因此只渲染 user 锚点 + tool_result + tool_fold；"},"start":0,"end":101}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/transcript_viewer.py"},"lines":{"text":"# assistant / thinking / system / log / file_ref / elapsed 一律隐藏。\n"},"line_number":31,"absolute_offset":1132,"submatches":[{"match":{"text":"# assistant / thinking / system / log / file_ref / elapsed 一律隐藏。"},"start":0,"end":74}]}}
{"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":14121,"human":"0.000014s"},"searches":1,"searches_with_match":1,"bytes_searched":13231,"bytes_printed":1011,"matched_lines":2,"matches":2}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/animations.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/animations.py"},"lines":{"text":"        # Deterministic per phrase, bounded by [min, max], and never exceeds 3s by default.\n"},"line_number":351,"absolute_offset":7629,"submatches":[{"match":{"text":"        # Deterministic per phrase, bounded by [min, max], and never exceeds 3s by default."},"start":0,"end":91}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/animations.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":10927,"human":"0.000011s"},"searches":1,"searches_with_match":1,"bytes_searched":13666,"bytes_printed":567,"matched_lines":1,"matches":1}}}
{"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":"    # ------------------------------------------------------------------\n"},"line_number":75,"absolute_offset":2211,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/marketplace_install_view.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":77,"absolute_offset":2303,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/marketplace_install_view.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":112,"absolute_offset":3324,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/marketplace_install_view.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":114,"absolute_offset":3416,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/marketplace_install_view.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":136,"absolute_offset":4153,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/marketplace_install_view.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":138,"absolute_offset":4245,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/marketplace_install_view.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":183,"absolute_offset":5921,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/marketplace_install_view.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":185,"absolute_offset":6007,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"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":38322,"human":"0.000038s"},"searches":1,"searches_with_match":1,"bytes_searched":10055,"bytes_printed":3497,"matched_lines":8,"matches":8}}}
{"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":"    # prompt_toolkit's dedupe drops no-op exact slash rows like \"/mcp\",\n"},"line_number":128,"absolute_offset":4479,"submatches":[{"match":{"text":"    # prompt_toolkit's dedupe drops no-op exact slash rows like \"/mcp\","},"start":0,"end":71}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"    # but those rows carry the visible confirmation and description.\n"},"line_number":129,"absolute_offset":4551,"submatches":[{"match":{"text":"    # but those rows carry the visible confirmation and description."},"start":0,"end":68}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"    # FileHistory format: entries are +prefixed line blocks separated by blank lines\n"},"line_number":145,"absolute_offset":5088,"submatches":[{"match":{"text":"    # FileHistory format: entries are +prefixed line blocks separated by blank lines"},"start":0,"end":84}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"    # Canonicalize to UTF-8 + LF so prompt_toolkit can reload history consistently\n"},"line_number":156,"absolute_offset":5491,"submatches":[{"match":{"text":"    # Canonicalize to UTF-8 + LF so prompt_toolkit can reload history consistently"},"start":0,"end":82}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"    # 进 staging 时计算一次的 @path 提示行（Read x (N lines) / Listed directory x），\n"},"line_number":166,"absolute_offset":5770,"submatches":[{"match":{"text":"    # 进 staging 时计算一次的 @path 提示行（Read x (N lines) / Listed directory x），"},"start":0,"end":98}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # 跟踪上一次 drain 末尾是否是 assistant entry：streaming 管线把一条逻辑 message\n"},"line_number":294,"absolute_offset":10815,"submatches":[{"match":{"text":"        # 跟踪上一次 drain 末尾是否是 assistant entry：streaming 管线把一条逻辑 message"},"start":0,"end":105}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # 拆成 N 条 entry，跨 drain 时需要用这个 seed 让 history_printer 把 run 续上\n"},"line_number":295,"absolute_offset":10921,"submatches":[{"match":{"text":"        # 拆成 N 条 entry，跨 drain 时需要用这个 seed 让 history_printer 把 run 续上"},"start":0,"end":99}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # Fill the entire input area with styled spaces to avoid VT100\n"},"line_number":390,"absolute_offset":15125,"submatches":[{"match":{"text":"        # Fill the entire input area with styled spaces to avoid VT100"},"start":0,"end":70}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # erase-to-end-of-line resetting the background to the terminal default.\n"},"line_number":391,"absolute_offset":15196,"submatches":[{"match":{"text":"        # erase-to-end-of-line resetting the background to the terminal default."},"start":0,"end":80}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # (prompt_toolkit renderer resets attributes before erase_end_of_line.)\n"},"line_number":392,"absolute_offset":15277,"submatches":[{"match":{"text":"        # (prompt_toolkit renderer resets attributes before erase_end_of_line.)"},"start":0,"end":79}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # BTW 模式整体隐藏 loading 区域（含 placeholder），避免 dual-loading。\n"},"line_number":452,"absolute_offset":17841,"submatches":[{"match":{"text":"        # BTW 模式整体隐藏 loading 区域（含 placeholder），避免 dual-loading。"},"start":0,"end":93}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # 折叠的 read/search 工具组：独立于 loading 区显示，保留 loading 动画。\n"},"line_number":462,"absolute_offset":18323,"submatches":[{"match":{"text":"        # 折叠的 read/search 工具组：独立于 loading 区显示，保留 loading 动画。"},"start":0,"end":98}]}}
{"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":596,"absolute_offset":23922,"submatches":[{"match":{"text":"        # 否则多余的固定高度会导致 prompt_toolkit 非全屏渲染时高度波动 → scrollback 污染。"},"start":0,"end":117}]}}
{"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":923,"absolute_offset":38633,"submatches":[{"match":{"text":"        # Team inbox 消息直连 scrollback（绕开 session_event_queue，实现实时显示）"},"start":0,"end":97}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # default scope（随包 md 资源）先加载，fail-fast；不进 builtin_names，\n"},"line_number":1041,"absolute_offset":42993,"submatches":[{"match":{"text":"        # default scope（随包 md 资源）先加载，fail-fast；不进 builtin_names，"},"start":0,"end":92}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # 允许被 project/user 同名覆盖。见 docs/plans/2026-06-18-builtin-default-slash-commands.md\n"},"line_number":1042,"absolute_offset":43086,"submatches":[{"match":{"text":"        # 允许被 project/user 同名覆盖。见 docs/plans/2026-06-18-builtin-default-slash-commands.md"},"start":0,"end":107}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # 内存 dedup：project > user > default，dict 赋值天然覆盖，不 warn\n"},"line_number":1054,"absolute_offset":43689,"submatches":[{"match":{"text":"        # 内存 dedup：project > user > default，dict 赋值天然覆盖，不 warn"},"start":0,"end":86}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # 启动 loading 动画，让 staging 期间就有视觉反馈，消除\"消息发出但什么都没发生\"的割裂感。\n"},"line_number":1337,"absolute_offset":54739,"submatches":[{"match":{"text":"        # 启动 loading 动画，让 staging 期间就有视觉反馈，消除\"消息发出但什么都没发生\"的割裂感。"},"start":0,"end":129}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # 不在此处清除 staging — 延迟到 _drain_history_async 的 run_in_terminal\n"},"line_number":1432,"absolute_offset":58090,"submatches":[{"match":{"text":"        # 不在此处清除 staging — 延迟到 _drain_history_async 的 run_in_terminal"},"start":0,"end":91}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # callback 内，让 Layout erase + scrollback print + 重渲染在同一原子窗口完成，\n"},"line_number":1433,"absolute_offset":58182,"submatches":[{"match":{"text":"        # callback 内，让 Layout erase + scrollback print + 重渲染在同一原子窗口完成，"},"start":0,"end":102}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"                # spec §3.2：drain 复用主循环 4-6 fps 节奏；line-level commit\n"},"line_number":2090,"absolute_offset":86405,"submatches":[{"match":{"text":"                # spec §3.2：drain 复用主循环 4-6 fps 节奏；line-level commit"},"start":0,"end":87}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"                # 5-30 entries/sec，每次 drain 处理 ~5 entries 批次（远低于上限）。\n"},"line_number":2091,"absolute_offset":86493,"submatches":[{"match":{"text":"                # 5-30 entries/sec，每次 drain 处理 ~5 entries 批次（远低于上限）。"},"start":0,"end":98}]}}
{"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":2139,"absolute_offset":88552,"submatches":[{"match":{"text":"                # 动态帧率：busy/动画时降为 6fps（缓解 scrollback 污染），idle 时 4fps"},"start":0,"end":104}]}}
{"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":2387,"absolute_offset":98193,"submatches":[{"match":{"text":"            # Ensure scrollback prints don't mix with the inline (full_screen=False) UI."},"start":0,"end":88}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"            # Commands → SlashCommandRegistry with namespace prefix\n"},"line_number":2542,"absolute_offset":105332,"submatches":[{"match":{"text":"            # Commands → SlashCommandRegistry with namespace prefix"},"start":0,"end":69}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"            # MCP servers → merge into agent config (frozen) and invalidate\n"},"line_number":2584,"absolute_offset":107288,"submatches":[{"match":{"text":"            # MCP servers → merge into agent config (frozen) and invalidate"},"start":0,"end":77}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"            # plugin.mcp_servers keys are already namespaced as \"{namespace}:{key}\"\n"},"line_number":2585,"absolute_offset":107366,"submatches":[{"match":{"text":"            # plugin.mcp_servers keys are already namespaced as \"{namespace}:{key}\""},"start":0,"end":83}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # Rebuild Skill tool so LLM sees new plugin skills in description\n"},"line_number":2596,"absolute_offset":107962,"submatches":[{"match":{"text":"        # Rebuild Skill tool so LLM sees new plugin skills in description"},"start":0,"end":73}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # Rebuild Agent tool so LLM sees new plugin agents in description\n"},"line_number":2600,"absolute_offset":108118,"submatches":[{"match":{"text":"        # Rebuild Agent tool so LLM sees new plugin agents in description"},"start":0,"end":73}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # Refresh tab-completion so new plugin commands appear\n"},"line_number":2606,"absolute_offset":108363,"submatches":[{"match":{"text":"        # Refresh tab-completion so new plugin commands appear"},"start":0,"end":62}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui.py"},"lines":{"text":"        # Remove plugin skills (by namespace prefix) — namespaces 已在上方定义\n"},"line_number":2631,"absolute_offset":109560,"submatches":[{"match":{"text":"        # Remove plugin skills (by namespace prefix) — namespaces 已在上方定义"},"start":0,"end":86}]}}
{"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":168730,"human":"0.000169s"},"searches":1,"searches_with_match":1,"bytes_searched":65535,"bytes_printed":13285,"matched_lines":31,"matches":31}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/status_bar.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/status_bar.py"},"lines":{"text":"    # ---- config ---------------------------------------------------------\n"},"line_number":70,"absolute_offset":2114,"submatches":[{"match":{"text":"    # ---- config ---------------------------------------------------------"},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/status_bar.py"},"lines":{"text":"    # ---- data resolvers -------------------------------------------------\n"},"line_number":111,"absolute_offset":4023,"submatches":[{"match":{"text":"    # ---- data resolvers -------------------------------------------------"},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/status_bar.py"},"lines":{"text":"        # Refresh token usage cache if any token-related items are enabled.\n"},"line_number":361,"absolute_offset":13189,"submatches":[{"match":{"text":"        # Refresh token usage cache if any token-related items are enabled."},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/status_bar.py"},"lines":{"text":"    # ---- terminal width / truncation ------------------------------------\n"},"line_number":380,"absolute_offset":14158,"submatches":[{"match":{"text":"    # ---- terminal width / truncation ------------------------------------"},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/status_bar.py"},"lines":{"text":"    # ---- dynamic info_status_text ---------------------------------------\n"},"line_number":427,"absolute_offset":15804,"submatches":[{"match":{"text":"    # ---- dynamic info_status_text ---------------------------------------"},"start":0,"end":75}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/status_bar.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":23756,"human":"0.000024s"},"searches":1,"searches_with_match":1,"bytes_searched":24319,"bytes_printed":2145,"matched_lines":5,"matches":5}}}
{"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":"    # process_start_perf 由入口 main() 在模块 import 之前捕获，使 profiler 能测到\n"},"line_number":706,"absolute_offset":22602,"submatches":[{"match":{"text":"    # process_start_perf 由入口 main() 在模块 import 之前捕获，使 profiler 能测到"},"start":0,"end":96}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/app.py"},"lines":{"text":"    # 在 _resolve_session 前安装 TUILoggingHandler，确保 session 初始化期间\n"},"line_number":813,"absolute_offset":26725,"submatches":[{"match":{"text":"    # 在 _resolve_session 前安装 TUILoggingHandler，确保 session 初始化期间"},"start":0,"end":87}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/app.py"},"lines":{"text":"    # 的 logger.warning()（如 user_instruction token 超限）能被 TUI 系统捕获，\n"},"line_number":814,"absolute_offset":26813,"submatches":[{"match":{"text":"    # 的 logger.warning()（如 user_instruction token 超限）能被 TUI 系统捕获，"},"start":0,"end":91}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/app.py"},"lines":{"text":"    # 而非 fallthrough 到 Python lastResort StreamHandler 以原始文本输出到 stderr。\n"},"line_number":815,"absolute_offset":26905,"submatches":[{"match":{"text":"    # 而非 fallthrough 到 Python lastResort StreamHandler 以原始文本输出到 stderr。"},"start":0,"end":95}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/app.py"},"lines":{"text":"    # setup_tui_logging 在 _resolve_session 前安装，用于捕获 session 初始化期 warning/error。\n"},"line_number":830,"absolute_offset":27553,"submatches":[{"match":{"text":"    # setup_tui_logging 在 _resolve_session 前安装，用于捕获 session 初始化期 warning/error。"},"start":0,"end":107}]}}
{"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":62114,"human":"0.000062s"},"searches":1,"searches_with_match":1,"bytes_searched":30885,"bytes_printed":2309,"matched_lines":5,"matches":5}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/assistant_render.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/assistant_render.py"},"lines":{"text":"    # C*: control/format classes; M*: combining marks (often invisible without base)\n"},"line_number":43,"absolute_offset":1107,"submatches":[{"match":{"text":"    # C*: control/format classes; M*: combining marks (often invisible without base)"},"start":0,"end":84}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/assistant_render.py"},"lines":{"text":"        # Segment ended before ambiguous markdown prefix was disambiguated.\n"},"line_number":160,"absolute_offset":4891,"submatches":[{"match":{"text":"        # Segment ended before ambiguous markdown prefix was disambiguated."},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/assistant_render.py"},"lines":{"text":"        # Fall back to visible plain-text prefixed rendering to avoid content loss.\n"},"line_number":161,"absolute_offset":4967,"submatches":[{"match":{"text":"        # Fall back to visible plain-text prefixed rendering to avoid content loss."},"start":0,"end":83}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/assistant_render.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":15695,"human":"0.000016s"},"searches":1,"searches_with_match":1,"bytes_searched":8168,"bytes_printed":1396,"matched_lines":3,"matches":3}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/btw_view.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/btw_view.py"},"lines":{"text":"    # ---------------------------- lifecycle ----------------------------\n"},"line_number":145,"absolute_offset":4539,"submatches":[{"match":{"text":"    # ---------------------------- lifecycle ----------------------------"},"start":0,"end":73}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/btw_view.py"},"lines":{"text":"    # ---------------------------- scroll ----------------------------\n"},"line_number":192,"absolute_offset":6445,"submatches":[{"match":{"text":"    # ---------------------------- scroll ----------------------------"},"start":0,"end":70}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/btw_view.py"},"lines":{"text":"        # 不在此处 clamp 上界，留给 _render 时统一 clamp（避免对 total 做两次计算）\n"},"line_number":226,"absolute_offset":7879,"submatches":[{"match":{"text":"        # 不在此处 clamp 上界，留给 _render 时统一 clamp（避免对 total 做两次计算）"},"start":0,"end":105}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/btw_view.py"},"lines":{"text":"    # ---------------------------- fork ----------------------------\n"},"line_number":241,"absolute_offset":8349,"submatches":[{"match":{"text":"    # ---------------------------- fork ----------------------------"},"start":0,"end":68}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/btw_view.py"},"lines":{"text":"    # ---------------------------- render ----------------------------\n"},"line_number":304,"absolute_offset":10986,"submatches":[{"match":{"text":"    # ---------------------------- render ----------------------------"},"start":0,"end":70}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/btw_view.py"},"lines":{"text":"# ---------------------------- prompt / validator ----------------------------\n"},"line_number":400,"absolute_offset":14957,"submatches":[{"match":{"text":"# ---------------------------- prompt / validator ----------------------------"},"start":0,"end":78}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/btw_view.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":65895,"human":"0.000066s"},"searches":1,"searches_with_match":1,"bytes_searched":16560,"bytes_printed":2632,"matched_lines":6,"matches":6}}}
{"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":"    # 跨 drain 跟踪上一次 drain 末尾是否是 assistant entry（streaming 管线把一条逻辑\n"},"line_number":38,"absolute_offset":1233,"submatches":[{"match":{"text":"    # 跨 drain 跟踪上一次 drain 末尾是否是 assistant entry（streaming 管线把一条逻辑"},"start":0,"end":103}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"    # message 拆成 N 条 entry，需要 seed 让 history_printer 把 run 续上）。class-level\n"},"line_number":39,"absolute_offset":1337,"submatches":[{"match":{"text":"    # message 拆成 N 条 entry，需要 seed 让 history_printer 把 run 续上）。class-level"},"start":0,"end":98}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/history_sync.py"},"lines":{"text":"                # Extract diff display data from raw envelope and observable args.\n"},"line_number":206,"absolute_offset":8917,"submatches":[{"match":{"text":"                # Extract diff display data from raw envelope and observable args."},"start":0,"end":82}]}}
{"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":27998,"human":"0.000028s"},"searches":1,"searches_with_match":1,"bytes_searched":22128,"bytes_printed":1502,"matched_lines":3,"matches":3}}}
{"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":"    # root 级别与 file handler 保持一致——这是单 knob 控第三方 DEBUG 噪音的关键：\n"},"line_number":430,"absolute_offset":15161,"submatches":[{"match":{"text":"    # root 级别与 file handler 保持一致——这是单 knob 控第三方 DEBUG 噪音的关键："},"start":0,"end":104}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/logging_adapter.py"},"lines":{"text":"    # 第三方 logger level=NOTSET 会继承 root 的 effective level，DEBUG 记录\n"},"line_number":431,"absolute_offset":15266,"submatches":[{"match":{"text":"    # 第三方 logger level=NOTSET 会继承 root 的 effective level，DEBUG 记录"},"start":0,"end":85}]}}
{"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":23442,"human":"0.000023s"},"searches":1,"searches_with_match":1,"bytes_searched":16492,"bytes_printed":1033,"matched_lines":2,"matches":2}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/update_check.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/update_check.py"},"lines":{"text":"# certifi 预建的 SSL context（进程级复用）。默认 verify=True 会让 httpx 走\n"},"line_number":42,"absolute_offset":948,"submatches":[{"match":{"text":"# certifi 预建的 SSL context（进程级复用）。默认 verify=True 会让 httpx 走"},"start":0,"end":90}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/update_check.py"},"lines":{"text":"# ssl.create_default_context() → 在 Windows 上枚举系统证书库，实测可达数秒；\n"},"line_number":43,"absolute_offset":1039,"submatches":[{"match":{"text":"# ssl.create_default_context() → 在 Windows 上枚举系统证书库，实测可达数秒；"},"start":0,"end":95}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/update_check.py"},"lines":{"text":"    # Returns plain text only. Callers are responsible for adding markup\n"},"line_number":403,"absolute_offset":12920,"submatches":[{"match":{"text":"    # Returns plain text only. Callers are responsible for adding markup"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/update_check.py"},"lines":{"text":"    # appropriate to their render target (Rich Console vs prompt_toolkit).\n"},"line_number":404,"absolute_offset":12993,"submatches":[{"match":{"text":"    # appropriate to their render target (Rich Console vs prompt_toolkit)."},"start":0,"end":74}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/update_check.py"},"lines":{"text":"    # 与 status_bar._run_git_command 一致的 env 锁抑制 + 硬超时策略，避免\n"},"line_number":622,"absolute_offset":19805,"submatches":[{"match":{"text":"    # 与 status_bar._run_git_command 一致的 env 锁抑制 + 硬超时策略，避免"},"start":0,"end":88}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/update_check.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":27923,"human":"0.000028s"},"searches":1,"searches_with_match":1,"bytes_searched":23221,"bytes_printed":2243,"matched_lines":5,"matches":5}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/statusline/picker_state.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/statusline/picker_state.py"},"lines":{"text":"    # ---- queries --------------------------------------------------------\n"},"line_number":56,"absolute_offset":1601,"submatches":[{"match":{"text":"    # ---- queries --------------------------------------------------------"},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/statusline/picker_state.py"},"lines":{"text":"    # ---- key handlers ---------------------------------------------------\n"},"line_number":69,"absolute_offset":2000,"submatches":[{"match":{"text":"    # ---- key handlers ---------------------------------------------------"},"start":0,"end":75}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/statusline/picker_state.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":19645,"human":"0.000020s"},"searches":1,"searches_with_match":1,"bytes_searched":3434,"bytes_printed":974,"matched_lines":2,"matches":2}}}
{"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":"    # Rows consumed by the fixed bottom band while staging is visible, plus\n"},"line_number":115,"absolute_offset":3243,"submatches":[{"match":{"text":"    # Rows consumed by the fixed bottom band while staging is visible, plus"},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"    # a small scrollback viewport budget so long previews don't fill the screen.\n"},"line_number":116,"absolute_offset":3319,"submatches":[{"match":{"text":"    # a small scrollback viewport budget so long previews don't fill the screen."},"start":0,"end":80}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"            # @path 提示行：复刻 scrollback 的 ⎿ dim subtitle，使 staging→scrollback 无缝衔接。\n"},"line_number":279,"absolute_offset":10109,"submatches":[{"match":{"text":"            # @path 提示行：复刻 scrollback 的 ⎿ dim subtitle，使 staging→scrollback 无缝衔接。"},"start":0,"end":113}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        # 顶部留 1 行空行：与 scrollback 中正在刷入的 thinking / assistant\n"},"line_number":653,"absolute_offset":25539,"submatches":[{"match":{"text":"        # 顶部留 1 行空行：与 scrollback 中正在刷入的 thinking / assistant"},"start":0,"end":88}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        # Running tools: multi-line tool panel with breathing dot.\n"},"line_number":729,"absolute_offset":28659,"submatches":[{"match":{"text":"        # Running tools: multi-line tool panel with breathing dot."},"start":0,"end":66}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        # spec §6.7 / §7.1：容器缓冲期把 aux 拼到 phrase 后（用 dim 分隔符）\n"},"line_number":815,"absolute_offset":32642,"submatches":[{"match":{"text":"        # spec §6.7 / §7.1：容器缓冲期把 aux 拼到 phrase 后（用 dim 分隔符）"},"start":0,"end":94}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        # 构建 Rich Text（与 SubmissionAnimator.renderable 相同结构）\n"},"line_number":1001,"absolute_offset":39664,"submatches":[{"match":{"text":"        # 构建 Rich Text（与 SubmissionAnimator.renderable 相同结构）"},"start":0,"end":78}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"        # Rich __rich_console__ 末尾会输出一个 \"\\n\" segment，需要先剥掉再追加，\n"},"line_number":1023,"absolute_offset":40537,"submatches":[{"match":{"text":"        # Rich __rich_console__ 末尾会输出一个 \"\\n\" segment，需要先剥掉再追加，"},"start":0,"end":96}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/render_panels.py"},"lines":{"text":"                    # blocked pending: TASK_BLOCKED 是中间符号，渲染时显示为 TASK_PENDING glyph\n"},"line_number":1124,"absolute_offset":45361,"submatches":[{"match":{"text":"                    # blocked pending: TASK_BLOCKED 是中间符号，渲染时显示为 TASK_PENDING glyph"},"start":0,"end":107}]}}
{"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":60487,"human":"0.000060s"},"searches":1,"searches_with_match":1,"bytes_searched":48798,"bytes_printed":4143,"matched_lines":9,"matches":9}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":59,"absolute_offset":1623,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":61,"absolute_offset":1715,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":75,"absolute_offset":2255,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":77,"absolute_offset":2341,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":88,"absolute_offset":2814,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":90,"absolute_offset":2906,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":96,"absolute_offset":3126,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":98,"absolute_offset":3218,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":106,"absolute_offset":3466,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":108,"absolute_offset":3552,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":166,"absolute_offset":5892,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":168,"absolute_offset":5978,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":188,"absolute_offset":6782,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":190,"absolute_offset":6868,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":249,"absolute_offset":9131,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":251,"absolute_offset":9249,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":267,"absolute_offset":9792,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":269,"absolute_offset":9884,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/errors_tab.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":62234,"human":"0.000062s"},"searches":1,"searches_with_match":1,"bytes_searched":11989,"bytes_printed":7500,"matched_lines":18,"matches":18}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/statusline/picker.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/statusline/picker.py"},"lines":{"text":"    # ---- entry / lifecycle ---------------------------------------------\n"},"line_number":45,"absolute_offset":1201,"submatches":[{"match":{"text":"    # ---- entry / lifecycle ---------------------------------------------"},"start":0,"end":74}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/statusline/picker.py"},"lines":{"text":"    # ---- container ------------------------------------------------------\n"},"line_number":61,"absolute_offset":1853,"submatches":[{"match":{"text":"    # ---- container ------------------------------------------------------"},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/statusline/picker.py"},"lines":{"text":"    # ---- delegated handlers --------------------------------------------\n"},"line_number":74,"absolute_offset":2279,"submatches":[{"match":{"text":"    # ---- delegated handlers --------------------------------------------"},"start":0,"end":74}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/statusline/picker.py"},"lines":{"text":"    # ---- fragment builders ---------------------------------------------\n"},"line_number":97,"absolute_offset":2979,"submatches":[{"match":{"text":"    # ---- fragment builders ---------------------------------------------"},"start":0,"end":74}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/statusline/picker.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":17585,"human":"0.000018s"},"searches":1,"searches_with_match":1,"bytes_searched":6092,"bytes_printed":1766,"matched_lines":4,"matches":4}}}
{"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 is empty: replace with placeholder. Length invariant is\n"},"line_number":37,"absolute_offset":1170,"submatches":[{"match":{"text":"            # Buffer is empty: replace with placeholder. Length invariant is"},"start":0,"end":76}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"            # intentionally broken here because placeholder text is never\n"},"line_number":38,"absolute_offset":1247,"submatches":[{"match":{"text":"            # intentionally broken here because placeholder text is never"},"start":0,"end":73}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # Plugin lifecycle: uninstall/enable/disable/update -> installed tab\n"},"line_number":99,"absolute_offset":3259,"submatches":[{"match":{"text":"    # Plugin lifecycle: uninstall/enable/disable/update -> installed tab"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"        # Search area（与 question_view._custom_input_area 同模式）\n"},"line_number":156,"absolute_offset":4950,"submatches":[{"match":{"text":"        # Search area（与 question_view._custom_input_area 同模式）"},"start":0,"end":73}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":173,"absolute_offset":5614,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":175,"absolute_offset":5719,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":235,"absolute_offset":7977,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":237,"absolute_offset":8072,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":320,"absolute_offset":10901,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":322,"absolute_offset":10995,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":364,"absolute_offset":12316,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":366,"absolute_offset":12414,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":422,"absolute_offset":14525,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":424,"absolute_offset":14611,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":470,"absolute_offset":16010,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/plugin_picker.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":472,"absolute_offset":16097,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"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":48553,"human":"0.000049s"},"searches":1,"searches_with_match":1,"bytes_searched":16801,"bytes_printed":6673,"matched_lines":16,"matches":16}}}
{"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":"            # Already in BTW mode (theoretically unreachable: input is hidden); defensive fallback.\n"},"line_number":495,"absolute_offset":17571,"submatches":[{"match":{"text":"            # Already in BTW mode (theoretically unreachable: input is hidden); defensive fallback."},"start":0,"end":99}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"            # Called from inside handle_escape; UI mode switch is finalized by the key binding.\n"},"line_number":503,"absolute_offset":17884,"submatches":[{"match":{"text":"            # Called from inside handle_escape; UI mode switch is finalized by the key binding."},"start":0,"end":95}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"            # Flush the /mcp command and result into scrollback.\n"},"line_number":1021,"absolute_offset":37669,"submatches":[{"match":{"text":"            # Flush the /mcp command and result into scrollback."},"start":0,"end":64}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"                # Success: return to NORMAL mode without going back to the menu.\n"},"line_number":1026,"absolute_offset":37864,"submatches":[{"match":{"text":"                # Success: return to NORMAL mode without going back to the menu."},"start":0,"end":80}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"                # Failure: return to the detail menu so the user can retry.\n"},"line_number":1031,"absolute_offset":38095,"submatches":[{"match":{"text":"                # Failure: return to the detail menu so the user can retry."},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        # Do not pre-seed the `> /compact` anchor here: compact must await a long task,\n"},"line_number":1370,"absolute_offset":49593,"submatches":[{"match":{"text":"        # Do not pre-seed the `> /compact` anchor here: compact must await a long task,"},"start":0,"end":87}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        # and seeding it early would leave the user entry's trailing blank line in scrollback\n"},"line_number":1371,"absolute_offset":49681,"submatches":[{"match":{"text":"        # and seeding it early would leave the user entry's trailing blank line in scrollback"},"start":0,"end":93}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        # where the subsequent drain's `⎿` subtitle cannot pop it\n"},"line_number":1372,"absolute_offset":49775,"submatches":[{"match":{"text":"        # where the subsequent drain's `⎿` subtitle cannot pop it"},"start":0,"end":67}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        # (see the in-batch pop constraint in history_printer.py:223).\n"},"line_number":1373,"absolute_offset":49843,"submatches":[{"match":{"text":"        # (see the in-batch pop constraint in history_printer.py:223)."},"start":0,"end":70}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        # The anchor is written together with the subtitle by _append_slash_command_result in the result phase.\n"},"line_number":1374,"absolute_offset":49914,"submatches":[{"match":{"text":"        # The anchor is written together with the subtitle by _append_slash_command_result in the result phase."},"start":0,"end":111}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        # Shortcut: /plugin marketplace add <source> → go straight to the lightweight install panel.\n"},"line_number":1538,"absolute_offset":55635,"submatches":[{"match":{"text":"        # Shortcut: /plugin marketplace add <source> → go straight to the lightweight install panel."},"start":0,"end":102}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        # seed_user_message + append_subtitle must occur in the same drain batch;\n"},"line_number":1699,"absolute_offset":62684,"submatches":[{"match":{"text":"        # seed_user_message + append_subtitle must occur in the same drain batch;"},"start":0,"end":81}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        # otherwise the user entry's trailing blank line will remain in scrollback.\n"},"line_number":1700,"absolute_offset":62766,"submatches":[{"match":{"text":"        # otherwise the user entry's trailing blank line will remain in scrollback."},"start":0,"end":83}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"            # Update status bar model name using the new model name from event.\n"},"line_number":1748,"absolute_offset":64763,"submatches":[{"match":{"text":"            # Update status bar model name using the new model name from event."},"start":0,"end":79}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/commands.py"},"lines":{"text":"        # The callback may have switched ui_mode (e.g., MCP_CONNECTING); respect its intent.\n"},"line_number":2082,"absolute_offset":76943,"submatches":[{"match":{"text":"        # The callback may have switched ui_mode (e.g., MCP_CONNECTING); respect its intent."},"start":0,"end":92}]}}
{"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":75750,"human":"0.000076s"},"searches":1,"searches_with_match":1,"bytes_searched":82076,"bytes_printed":6627,"matched_lines":15,"matches":15}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"# 截断/展开提示（如 \"+3 more lines\"、\"+5 more\"、\"(ctrl+o to expand)\"），\n"},"line_number":58,"absolute_offset":1664,"submatches":[{"match":{"text":"# 截断/展开提示（如 \"+3 more lines\"、\"+5 more\"、\"(ctrl+o to expand)\"），"},"start":0,"end":84}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"# list / ordered-list / blockquote 起始标记。loose list (\"- a\\n\\n- b\\n\") 流式\n"},"line_number":101,"absolute_offset":3110,"submatches":[{"match":{"text":"# list / ordered-list / blockquote 起始标记。loose list (\"- a\\n\\n- b\\n\") 流式"},"start":0,"end":84}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"# 按行 commit 后，items 之间的空行会被切成独立 assistant entry，渲染产生多余空行；\n"},"line_number":102,"absolute_offset":3195,"submatches":[{"match":{"text":"# 按行 commit 后，items 之间的空行会被切成独立 assistant entry，渲染产生多余空行；"},"start":0,"end":107}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"# claude code 把整段喂 marked.lexer 在 token 层就消化了，我们逐行 commit 架构下\n"},"line_number":103,"absolute_offset":3303,"submatches":[{"match":{"text":"# claude code 把整段喂 marked.lexer 在 token 层就消化了，我们逐行 commit 架构下"},"start":0,"end":97}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"    # spec 对照 claude code utils/messages.ts:740 normalizeMessages：\n"},"line_number":253,"absolute_offset":7900,"submatches":[{"match":{"text":"    # spec 对照 claude code utils/messages.ts:740 normalizeMessages："},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"    # \"1 dot = 1 logical assistant block\"。streaming 管线把每行 commit 成一条\n"},"line_number":254,"absolute_offset":7973,"submatches":[{"match":{"text":"    # \"1 dot = 1 logical assistant block\"。streaming 管线把每行 commit 成一条"},"start":0,"end":86}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"    # entry_type=\"assistant\" 的 HistoryEntry（spec §6.5），所以\"逻辑 message\"在\n"},"line_number":255,"absolute_offset":8060,"submatches":[{"match":{"text":"    # entry_type=\"assistant\" 的 HistoryEntry（spec §6.5），所以\"逻辑 message\"在"},"start":0,"end":89}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"    # printer 这一层被识别为\"连续 assistant entry 的 run\"——只在 run 起始处加 `●`，\n"},"line_number":256,"absolute_offset":8150,"submatches":[{"match":{"text":"    # printer 这一层被识别为\"连续 assistant entry 的 run\"——只在 run 起始处加 `●`，"},"start":0,"end":105}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"    # 后续行用 2 空格缩进保持视觉对齐。`prev_was_assistant` 把 run 状态跨 drain 传过来。\n"},"line_number":257,"absolute_offset":8256,"submatches":[{"match":{"text":"    # 后续行用 2 空格缩进保持视觉对齐。`prev_was_assistant` 把 run 状态跨 drain 传过来。"},"start":0,"end":111}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"        # 跳过位于两个块标记 entry 之间的空 assistant entry（loose list 视觉对齐）\n"},"line_number":268,"absolute_offset":8911,"submatches":[{"match":{"text":"        # 跳过位于两个块标记 entry 之间的空 assistant entry（loose list 视觉对齐）"},"start":0,"end":101}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"        # Recap entries: Claude Code-style away-summary marker, scrollback-only.\n"},"line_number":323,"absolute_offset":11255,"submatches":[{"match":{"text":"        # Recap entries: Claude Code-style away-summary marker, scrollback-only."},"start":0,"end":80}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"        # File reference hint: reuse subtitle style, attached to preceding user message\n"},"line_number":362,"absolute_offset":12959,"submatches":[{"match":{"text":"        # File reference hint: reuse subtitle style, attached to preceding user message"},"start":0,"end":87}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"                # Rich Text object — preserve styled content (e.g. colored diff)\n"},"line_number":414,"absolute_offset":15289,"submatches":[{"match":{"text":"                # Rich Text object — preserve styled content (e.g. colored diff)"},"start":0,"end":82}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"                # For multi-line Rich Text bodies (Edit/Write inline diff),\n"},"line_number":422,"absolute_offset":15708,"submatches":[{"match":{"text":"                # For multi-line Rich Text bodies (Edit/Write inline diff),"},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"                # subtitle (\"Added X, removed Y\") goes between signature and\n"},"line_number":423,"absolute_offset":15784,"submatches":[{"match":{"text":"                # subtitle (\"Added X, removed Y\") goes between signature and"},"start":0,"end":76}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"                # body so the reader sees the summary before the diff. For\n"},"line_number":424,"absolute_offset":15861,"submatches":[{"match":{"text":"                # body so the reader sees the summary before the diff. For"},"start":0,"end":74}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"                # single-line text (bash/grep/read previews), subtitle stays\n"},"line_number":425,"absolute_offset":15936,"submatches":[{"match":{"text":"                # single-line text (bash/grep/read previews), subtitle stays"},"start":0,"end":76}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"        # assume_run_continues_at_tail=True 时（drain 在 streaming 中），把 batch\n"},"line_number":553,"absolute_offset":21743,"submatches":[{"match":{"text":"        # assume_run_continues_at_tail=True 时（drain 在 streaming 中），把 batch"},"start":0,"end":88}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"        # 末尾的 assistant entry 当作\"run 仍在续\"处理，不加 trailing Text(\"\")，\n"},"line_number":554,"absolute_offset":21832,"submatches":[{"match":{"text":"        # 末尾的 assistant entry 当作\"run 仍在续\"处理，不加 trailing Text(\"\")，"},"start":0,"end":93}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"        # 避免 4-6fps drain 把同一条逻辑 message 切碎后每个 batch 末尾各加一空行。\n"},"line_number":555,"absolute_offset":21926,"submatches":[{"match":{"text":"        # 避免 4-6fps drain 把同一条逻辑 message 切碎后每个 batch 末尾各加一空行。"},"start":0,"end":103}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"    # highlight=False：Rich 默认 ReprHighlighter 会把 \"/cmd\" 误识别为 path/filename\n"},"line_number":574,"absolute_offset":22577,"submatches":[{"match":{"text":"    # highlight=False：Rich 默认 ReprHighlighter 会把 \"/cmd\" 误识别为 path/filename"},"start":0,"end":92}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"    # 并染成 magenta/bright-magenta（即\"粉红色 slash 命令名\"）。所有 entry 在\n"},"line_number":575,"absolute_offset":22670,"submatches":[{"match":{"text":"    # 并染成 magenta/bright-magenta（即\"粉红色 slash 命令名\"）。所有 entry 在"},"start":0,"end":93}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"lines":{"text":"    # render_history_group 内已自带 explicit Text 样式，不需要再做自动高亮。\n"},"line_number":576,"absolute_offset":22764,"submatches":[{"match":{"text":"    # render_history_group 内已自带 explicit Text 样式，不需要再做自动高亮。"},"start":0,"end":93}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/history_printer.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":108106,"human":"0.000108s"},"searches":1,"searches_with_match":1,"bytes_searched":23046,"bytes_printed":10220,"matched_lines":23,"matches":23}}}
{"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":"        # 必须在 _exit_question_mode() 清空 UI 状态前抓取 display parts。\n"},"line_number":186,"absolute_offset":6657,"submatches":[{"match":{"text":"        # 必须在 _exit_question_mode() 清空 UI 状态前抓取 display parts。"},"start":0,"end":84}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tui_parts/input_behavior.py"},"lines":{"text":"            # AskUserQuestion 答复以 tool_result 行 + ⎿ subtitle 渲染：\n"},"line_number":198,"absolute_offset":7225,"submatches":[{"match":{"text":"            # AskUserQuestion 答复以 tool_result 行 + ⎿ subtitle 渲染："},"start":0,"end":80}]}}
{"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":20490,"human":"0.000020s"},"searches":1,"searches_with_match":1,"bytes_searched":19358,"bytes_printed":1007,"matched_lines":2,"matches":2}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"        # 导航条目列表：[{\"key\": ..., \"name\": ..., \"is_add_row\": bool, ...}]\n"},"line_number":50,"absolute_offset":1590,"submatches":[{"match":{"text":"        # 导航条目列表：[{\"key\": ..., \"name\": ..., \"is_add_row\": bool, ...}]"},"start":0,"end":83}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":76,"absolute_offset":2496,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":78,"absolute_offset":2582,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":153,"absolute_offset":5439,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":155,"absolute_offset":5531,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":162,"absolute_offset":5743,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":164,"absolute_offset":5829,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":320,"absolute_offset":12946,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":322,"absolute_offset":13032,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":374,"absolute_offset":14974,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":376,"absolute_offset":15060,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":468,"absolute_offset":19180,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":470,"absolute_offset":19272,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"        # Marketplace list is typically very small (1-3 items + Add row), skip filter\n"},"line_number":494,"absolute_offset":20235,"submatches":[{"match":{"text":"        # Marketplace list is typically very small (1-3 items + Add row), skip filter"},"start":0,"end":85}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":500,"absolute_offset":20415,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":502,"absolute_offset":20507,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":54527,"human":"0.000055s"},"searches":1,"searches_with_match":1,"bytes_searched":27331,"bytes_printed":6858,"matched_lines":16,"matches":16}}}
{"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":"# spec §6.3：fence 开 marker 正则。CommonMark 允许 ≥ 3 个 backtick / tilde；\n"},"line_number":301,"absolute_offset":8788,"submatches":[{"match":{"text":"# spec §6.3：fence 开 marker 正则。CommonMark 允许 ≥ 3 个 backtick / tilde；"},"start":0,"end":88}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"# lang 字段允许空（裸 fence），但 lang 后不允许有其他内容（仅 trailing whitespace）。\n"},"line_number":302,"absolute_offset":8877,"submatches":[{"match":{"text":"# lang 字段允许空（裸 fence），但 lang 后不允许有其他内容（仅 trailing whitespace）。"},"start":0,"end":108}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"# spec §6.3：GFM table 分隔符行正则。要求 ≥ 2 列（即 ≥ 1 个内部 | 分隔符）。\n"},"line_number":305,"absolute_offset":9064,"submatches":[{"match":{"text":"# spec §6.3：GFM table 分隔符行正则。要求 ≥ 2 列（即 ≥ 1 个内部 | 分隔符）。"},"start":0,"end":102}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        # ━━━━━ spec §4.1 新管道状态字段（Phase 1.2 引入，Phase 4-6 接入） ━━━━━\n"},"line_number":380,"absolute_offset":11955,"submatches":[{"match":{"text":"        # ━━━━━ spec §4.1 新管道状态字段（Phase 1.2 引入，Phase 4-6 接入） ━━━━━"},"start":0,"end":115}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"    # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"},"line_number":539,"absolute_offset":18198,"submatches":[{"match":{"text":"    # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"},"start":0,"end":201}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"    # spec §6 流式新管道方法集（Phase 1-6 新增；Phase 7 接入 handle_event）\n"},"line_number":540,"absolute_offset":18400,"submatches":[{"match":{"text":"    # spec §6 流式新管道方法集（Phase 1-6 新增；Phase 7 接入 handle_event）"},"start":0,"end":91}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"    # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"},"line_number":542,"absolute_offset":18533,"submatches":[{"match":{"text":"    # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"},"start":0,"end":201}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"    # 但实现共用 —— 保证 held 候选与续行判定语义对称（避免分裂导致的 corner-case bug）。\n"},"line_number":588,"absolute_offset":20755,"submatches":[{"match":{"text":"    # 但实现共用 —— 保证 held 候选与续行判定语义对称（避免分裂导致的 corner-case bug）。"},"start":0,"end":120}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                # plan 第 3 轮加固：flush_container 后 _container 必须为 None，\n"},"line_number":668,"absolute_offset":24314,"submatches":[{"match":{"text":"                # plan 第 3 轮加固：flush_container 后 _container 必须为 None，"},"start":0,"end":89}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        # ② 容器残留：fence 自动追加 synthetic close（fence_marker verbatim\n"},"line_number":756,"absolute_offset":28070,"submatches":[{"match":{"text":"        # ② 容器残留：fence 自动追加 synthetic close（fence_marker verbatim"},"start":0,"end":87}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        #    存的就是开 fence 用的 marker，append 后 _is_fence_close 天然满足）；\n"},"line_number":757,"absolute_offset":28158,"submatches":[{"match":{"text":"        #    存的就是开 fence 用的 marker，append 后 _is_fence_close 天然满足）；"},"start":0,"end":96}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"            # AskUserQuestion 答复入 scrollback：用 tool_result 样式渲染头行（●），\n"},"line_number":896,"absolute_offset":33496,"submatches":[{"match":{"text":"            # AskUserQuestion 答复入 scrollback：用 tool_result 样式渲染头行（●），"},"start":0,"end":99}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        # spec §6.4：turn 结束 force flush 所有 pending（held / container /\n"},"line_number":923,"absolute_offset":34709,"submatches":[{"match":{"text":"        # spec §6.4：turn 结束 force flush 所有 pending（held / container /"},"start":0,"end":82}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                # 格式：SubagentName(描述) ∙ model(dim) ∙ elapsed ∙ tools ∙ tokens\n"},"line_number":1311,"absolute_offset":49006,"submatches":[{"match":{"text":"                # 格式：SubagentName(描述) ∙ model(dim) ∙ elapsed ∙ tools ∙ tokens"},"start":0,"end":95}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"        # All completed: hide panel and write a summary entry once.\n"},"line_number":1573,"absolute_offset":60096,"submatches":[{"match":{"text":"        # All completed: hide panel and write a summary entry once."},"start":0,"end":67}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                # blocked pending: display as TASK_PENDING glyph + dim\n"},"line_number":1621,"absolute_offset":61985,"submatches":[{"match":{"text":"                # blocked pending: display as TASK_PENDING glyph + dim"},"start":0,"end":70}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                    # spec §6.1：text delta → 累到 _text_pending → 按 \\n 切完整行入队\n"},"line_number":1689,"absolute_offset":64593,"submatches":[{"match":{"text":"                    # spec §6.1：text delta → 累到 _text_pending → 按 \\n 切完整行入队"},"start":0,"end":100}]}}
{"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":1698,"absolute_offset":65190,"submatches":[{"match":{"text":"                # tool 调用前先把 _text_pending / _thinking_batch 落到 scrollback，"},"start":0,"end":91}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                # Fired means the scheduler materialized pending work; the TUI uses it as a\n"},"line_number":1868,"absolute_offset":73368,"submatches":[{"match":{"text":"                # Fired means the scheduler materialized pending work; the TUI uses it as a"},"start":0,"end":91}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                # transient loading signal and should not persist every recurring tick.\n"},"line_number":1869,"absolute_offset":73460,"submatches":[{"match":{"text":"                # transient loading signal and should not persist every recurring tick."},"start":0,"end":87}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                # 答完后由 _submit_question_reply 写一条 tool_result + ⎿ subtitle 汇总。\n"},"line_number":1970,"absolute_offset":78460,"submatches":[{"match":{"text":"                # 答完后由 _submit_question_reply 写一条 tool_result + ⎿ subtitle 汇总。"},"start":0,"end":100}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                # Cancellation/error paths may emit StepCompleteEvent without ToolResultEvent.\n"},"line_number":1980,"absolute_offset":79023,"submatches":[{"match":{"text":"                # Cancellation/error paths may emit StepCompleteEvent without ToolResultEvent."},"start":0,"end":94}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/event_renderer.py"},"lines":{"text":"                # Safety net: if any running tool rows remain, stop event means this turn is ending.\n"},"line_number":1990,"absolute_offset":79581,"submatches":[{"match":{"text":"                # Safety net: if any running tool rows remain, stop event means this turn is ending."},"start":0,"end":100}]}}
{"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":142696,"human":"0.000143s"},"searches":1,"searches_with_match":1,"bytes_searched":82504,"bytes_printed":10814,"matched_lines":23,"matches":23}}}
{"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":78,"absolute_offset":2186,"submatches":[{"match":{"text":"# Tools that are always hidden from scrollback (have dedicated event channels)."},"start":0,"end":79}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/tool_view.py"},"lines":{"text":"# Task coordination tools mostly use the dedicated task panel; only durable\n"},"line_number":81,"absolute_offset":2353,"submatches":[{"match":{"text":"# Task coordination tools mostly use the dedicated task panel; only durable"},"start":0,"end":75}]}}
{"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":21567,"human":"0.000022s"},"searches":1,"searches_with_match":1,"bytes_searched":30807,"bytes_printed":940,"matched_lines":2,"matches":2}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/store.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/store.py"},"lines":{"text":"# ---------------------------------------------------------------------------\n"},"line_number":248,"absolute_offset":7847,"submatches":[{"match":{"text":"# ---------------------------------------------------------------------------"},"start":0,"end":77}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/store.py"},"lines":{"text":"# ---------------------------------------------------------------------------\n"},"line_number":250,"absolute_offset":7932,"submatches":[{"match":{"text":"# ---------------------------------------------------------------------------"},"start":0,"end":77}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/store.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":14384,"human":"0.000014s"},"searches":1,"searches_with_match":1,"bytes_searched":11303,"bytes_printed":951,"matched_lines":2,"matches":2}}}
{"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":"    # ------------------------------------------------------------------\n"},"line_number":86,"absolute_offset":2494,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":88,"absolute_offset":2586,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":94,"absolute_offset":2812,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":96,"absolute_offset":2898,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":143,"absolute_offset":4705,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":145,"absolute_offset":4791,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":176,"absolute_offset":5955,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":178,"absolute_offset":6052,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":256,"absolute_offset":9115,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":258,"absolute_offset":9212,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":357,"absolute_offset":13217,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":359,"absolute_offset":13317,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":392,"absolute_offset":14355,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":394,"absolute_offset":14441,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":418,"absolute_offset":15293,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":420,"absolute_offset":15379,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":474,"absolute_offset":17413,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":476,"absolute_offset":17505,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":519,"absolute_offset":19342,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/discover_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":521,"absolute_offset":19440,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"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":94787,"human":"0.000095s"},"searches":1,"searches_with_match":1,"bytes_searched":22620,"bytes_printed":8374,"matched_lines":20,"matches":20}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker.py"},"lines":{"text":"    # ---- entry / lifecycle ---------------------------------------------\n"},"line_number":70,"absolute_offset":1769,"submatches":[{"match":{"text":"    # ---- entry / lifecycle ---------------------------------------------"},"start":0,"end":74}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker.py"},"lines":{"text":"    # ---- container ------------------------------------------------------\n"},"line_number":81,"absolute_offset":2333,"submatches":[{"match":{"text":"    # ---- container ------------------------------------------------------"},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker.py"},"lines":{"text":"    # ---- delegated handlers --------------------------------------------\n"},"line_number":94,"absolute_offset":2759,"submatches":[{"match":{"text":"    # ---- delegated handlers --------------------------------------------"},"start":0,"end":74}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker.py"},"lines":{"text":"    # ---- fragment builders ---------------------------------------------\n"},"line_number":122,"absolute_offset":3633,"submatches":[{"match":{"text":"    # ---- fragment builders ---------------------------------------------"},"start":0,"end":74}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":20520,"human":"0.000021s"},"searches":1,"searches_with_match":1,"bytes_searched":8614,"bytes_printed":1747,"matched_lines":4,"matches":4}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/markdown_render.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/markdown_render.py"},"lines":{"text":"    # Rich uses styled right-padding spaces to paint code block backgrounds.\n"},"line_number":90,"absolute_offset":2286,"submatches":[{"match":{"text":"    # Rich uses styled right-padding spaces to paint code block backgrounds."},"start":0,"end":76}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/markdown_render.py"},"lines":{"text":"    # Remove only structural trailing blank lines, not spaces on the last code line.\n"},"line_number":91,"absolute_offset":2363,"submatches":[{"match":{"text":"    # Remove only structural trailing blank lines, not spaces on the last code line."},"start":0,"end":84}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/markdown_render.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":34680,"human":"0.000035s"},"searches":1,"searches_with_match":1,"bytes_searched":5281,"bytes_printed":970,"matched_lines":2,"matches":2}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":86,"absolute_offset":2635,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":88,"absolute_offset":2721,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":166,"absolute_offset":5446,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":168,"absolute_offset":5538,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":177,"absolute_offset":5883,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":179,"absolute_offset":5975,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":213,"absolute_offset":7314,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":215,"absolute_offset":7400,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":359,"absolute_offset":13576,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":361,"absolute_offset":13662,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":383,"absolute_offset":14546,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":385,"absolute_offset":14632,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":485,"absolute_offset":18513,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"lines":{"text":"    # ------------------------------------------------------------------\n"},"line_number":487,"absolute_offset":18605,"submatches":[{"match":{"text":"    # ------------------------------------------------------------------"},"start":0,"end":72}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/plugins/tabs/installed_tab.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":65783,"human":"0.000066s"},"searches":1,"searches_with_match":1,"bytes_searched":29068,"bytes_printed":5921,"matched_lines":14,"matches":14}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/figures.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/figures.py"},"lines":{"text":"# ─────────────────────────────────────────────────────────────────────\n"},"line_number":22,"absolute_offset":665,"submatches":[{"match":{"text":"# ─────────────────────────────────────────────────────────────────────"},"start":0,"end":209}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/figures.py"},"lines":{"text":"# ─────────────────────────────────────────────────────────────────────\n"},"line_number":24,"absolute_offset":923,"submatches":[{"match":{"text":"# ─────────────────────────────────────────────────────────────────────"},"start":0,"end":209}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/figures.py"},"lines":{"text":"# ⏺ (darwin) / ● (other) — 实心圆（EFFORT_HIGH 选中态等语义使用；行首 marker 见 BULLET）\n"},"line_number":26,"absolute_offset":1134,"submatches":[{"match":{"text":"# ⏺ (darwin) / ● (other) — 实心圆（EFFORT_HIGH 选中态等语义使用；行首 marker 见 BULLET）"},"start":0,"end":111}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/figures.py"},"lines":{"text":"# ─────────────────────────────────────────────────────────────────────\n"},"line_number":77,"absolute_offset":2521,"submatches":[{"match":{"text":"# ─────────────────────────────────────────────────────────────────────"},"start":0,"end":209}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/figures.py"},"lines":{"text":"# ─────────────────────────────────────────────────────────────────────\n"},"line_number":80,"absolute_offset":2852,"submatches":[{"match":{"text":"# ─────────────────────────────────────────────────────────────────────"},"start":0,"end":209}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/figures.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":65674,"human":"0.000066s"},"searches":1,"searches_with_match":1,"bytes_searched":4633,"bytes_printed":3267,"matched_lines":5,"matches":5}}}
{"type":"begin","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker_state.py"}}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker_state.py"},"lines":{"text":"    # ---- queries --------------------------------------------------------\n"},"line_number":85,"absolute_offset":2279,"submatches":[{"match":{"text":"    # ---- queries --------------------------------------------------------"},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker_state.py"},"lines":{"text":"    # ---- key handlers ---------------------------------------------------\n"},"line_number":99,"absolute_offset":2805,"submatches":[{"match":{"text":"    # ---- key handlers ---------------------------------------------------"},"start":0,"end":75}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker_state.py"},"lines":{"text":"            # SUBVIEW: commit selection to draft, return to MAIN.\n"},"line_number":147,"absolute_offset":5139,"submatches":[{"match":{"text":"            # SUBVIEW: commit selection to draft, return to MAIN."},"start":0,"end":65}]}}
{"type":"match","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker_state.py"},"lines":{"text":"    # ---- helpers --------------------------------------------------------\n"},"line_number":185,"absolute_offset":6661,"submatches":[{"match":{"text":"    # ---- helpers --------------------------------------------------------"},"start":0,"end":75}]}}
{"type":"end","data":{"path":{"text":"/home/hyc/projects/agent-sdk/packages/comate_cli/comate_cli/terminal_agent/config/picker_state.py"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":25828,"human":"0.000026s"},"searches":1,"searches_with_match":1,"bytes_searched":7071,"bytes_printed":1764,"matched_lines":4,"matches":4}}}
{"data":{"elapsed_total":{"human":"0.018168s","nanos":18167873,"secs":0},"stats":{"bytes_printed":117741,"bytes_searched":736167,"elapsed":{"human":"0.001569s","nanos":1569226,"secs":0},"matched_lines":264,"matches":264,"searches":33,"searches_with_match":33}},"type":"summary"}
