comate-cli 0.12.5__tar.gz → 0.12.6b2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- comate_cli-0.12.6b2/.python-version +1 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/CHANGELOG.md +11 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/CONTEXT.md +69 -4
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/PKG-INFO +2 -2
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/main.py +7 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/mcp_cli.py +191 -50
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/app.py +81 -8
- comate_cli-0.12.6b2/comate_cli/terminal_agent/browser_open.py +41 -0
- comate_cli-0.12.6b2/comate_cli/terminal_agent/clipboard_text.py +126 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/context_view.py +53 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/effort_style.py +31 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/event_renderer.py +116 -16
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/figures.py +3 -0
- comate_cli-0.12.6b2/comate_cli/terminal_agent/focus_events.py +24 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/history_printer.py +49 -33
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/i18n/_en.py +119 -21
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/i18n/_ja.py +119 -21
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/i18n/_zh.py +111 -10
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/i18n/message.py +102 -6
- comate_cli-0.12.6b2/comate_cli/terminal_agent/image_chips.py +250 -0
- comate_cli-0.12.6b2/comate_cli/terminal_agent/job_activity.py +57 -0
- comate_cli-0.12.6b2/comate_cli/terminal_agent/job_indicator.py +177 -0
- comate_cli-0.12.6b2/comate_cli/terminal_agent/jobs_menu.py +818 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/jobs_state.py +96 -72
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/logging_adapter.py +31 -0
- comate_cli-0.12.6b2/comate_cli/terminal_agent/loop_freeze_watchdog.py +160 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/mcp_serve.py +72 -29
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/menu_panel.py +78 -3
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/message_style.py +20 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/models.py +5 -1
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/marketplace_install_view.py +12 -35
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/plugin_picker.py +2 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/tabs/discover_tab.py +47 -13
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/tabs/installed_tab.py +7 -2
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py +7 -1
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/print_mode.py +40 -1
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/resume_picker.py +13 -52
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/resume_selector.py +6 -25
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/side_install.py +8 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/skill_slash_input.py +28 -7
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/status_bar.py +22 -8
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/theme.py +42 -0
- comate_cli-0.12.6b2/comate_cli/terminal_agent/tip_highlight.py +65 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tips.py +37 -12
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tool_approval_view.py +3 -1
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tool_fold.py +31 -10
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tool_result_formatters.py +15 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tool_view.py +4 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui.py +202 -63
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/commands.py +256 -57
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/history_sync.py +29 -7
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/input_behavior.py +188 -38
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/key_bindings.py +211 -1
- comate_cli-0.12.6b2/comate_cli/terminal_agent/tui_parts/mcp_auth_view.py +276 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/render_panels.py +72 -163
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/shell_mode.py +6 -6
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/ui_mode.py +5 -1
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/update_check.py +398 -74
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/update_messages.py +77 -0
- comate_cli-0.12.6b2/comate_cli/terminal_agent/workflows_menu.py +756 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/workflows_panel_model.py +16 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/pyproject.toml +2 -2
- comate_cli-0.12.6b2/tests/test_app_mcp_needs_auth_hint.py +80 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_print_mode.py +105 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_profile_threading.py +13 -2
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_startup_latency.py +27 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_backend_feedback.py +3 -0
- comate_cli-0.12.6b2/tests/test_clipboard_chip_restore.py +85 -0
- comate_cli-0.12.6b2/tests/test_clipboard_text.py +147 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_commands_system_messages.py +2 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_completion_status_panel.py +53 -0
- comate_cli-0.12.6b2/tests/test_context_view_tool_search.py +123 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_discover_tab.py +148 -4
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_effort_style.py +54 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_jobs.py +57 -15
- comate_cli-0.12.6b2/tests/test_event_renderer_mcp_background.py +202 -0
- comate_cli-0.12.6b2/tests/test_event_renderer_oversized_tools.py +84 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_streaming.py +116 -0
- comate_cli-0.12.6b2/tests/test_event_renderer_tool_search_notice.py +46 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_exit_guard.py +23 -3
- comate_cli-0.12.6b2/tests/test_focus_events.py +35 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_history_drain_throttle.py +6 -6
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_history_printer_log.py +57 -3
- comate_cli-0.12.6b2/tests/test_history_printer_styles.py +185 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_history_sync_tool_fold.py +79 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_i18n.py +84 -4
- comate_cli-0.12.6b2/tests/test_image_chip_deletion.py +208 -0
- comate_cli-0.12.6b2/tests/test_image_chips.py +365 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_installed_tab.py +50 -6
- comate_cli-0.12.6b2/tests/test_job_activity.py +107 -0
- comate_cli-0.12.6b2/tests/test_job_indicator.py +359 -0
- comate_cli-0.12.6b2/tests/test_job_indicator_host.py +449 -0
- comate_cli-0.12.6b2/tests/test_job_indicator_pty.py +142 -0
- comate_cli-0.12.6b2/tests/test_jobs_menu.py +1064 -0
- comate_cli-0.12.6b2/tests/test_jobs_menu_host.py +247 -0
- comate_cli-0.12.6b2/tests/test_jobs_menu_pty.py +126 -0
- comate_cli-0.12.6b2/tests/test_jobs_state.py +533 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_loading_tip_picker.py +40 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_logging_adapter.py +124 -0
- comate_cli-0.12.6b2/tests/test_loop_freeze_watchdog.py +188 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_marketplaces_tab.py +31 -3
- comate_cli-0.12.6b2/tests/test_mcp_auth_panel_pty.py +266 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_mcp_cli.py +207 -68
- comate_cli-0.12.6b2/tests/test_mcp_cli_auth.py +327 -0
- comate_cli-0.12.6b2/tests/test_mcp_jobs_pty.py +211 -0
- comate_cli-0.12.6b2/tests/test_mcp_panel_auth.py +460 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_mcp_serve.py +188 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_mcp_slash_command.py +58 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_menu_cursor_unification.py +2 -2
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_menu_panel.py +60 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_modal_panel_visibility.py +10 -75
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_plugin_tui_components.py +20 -0
- comate_cli-0.12.6b2/tests/test_print_mode_monitor_cap.py +222 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_resume_picker.py +53 -107
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_resume_selector.py +47 -3
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_side_install.py +33 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_skill_slash_input.py +33 -2
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_status_bar.py +31 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_status_bar_transient.py +15 -0
- comate_cli-0.12.6b2/tests/test_tip_highlight.py +86 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tips.py +9 -8
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_approval_view.py +45 -7
- comate_cli-0.12.6b2/tests/test_tui_image_chip_retention.py +608 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_image_paste.py +129 -8
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_image_restore.py +12 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_image_submit.py +0 -28
- comate_cli-0.12.6b2/tests/test_tui_loading_tip_rotation.py +299 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_queue_pop_images.py +18 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_queue_sdk_source.py +4 -12
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_scratchpad_fold_wiring.py +0 -1
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_send_undo_window.py +0 -39
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_tool_result_registry_lifecycle.py +0 -2
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_ui_tick_exception_isolation.py +0 -1
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_ultracode_keyword_submit.py +0 -1
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_update_check.py +772 -6
- comate_cli-0.12.6b2/tests/test_workflows_menu.py +930 -0
- comate_cli-0.12.6b2/tests/test_workflows_menu_host.py +287 -0
- comate_cli-0.12.6b2/tests/test_workflows_menu_pty.py +168 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/uv.lock +3 -3
- comate_cli-0.12.5/comate_cli/terminal_agent/image_chips.py +0 -106
- comate_cli-0.12.5/comate_cli/terminal_agent/jobs_picker.py +0 -562
- comate_cli-0.12.5/comate_cli/terminal_agent/workflows_panel.py +0 -719
- comate_cli-0.12.5/tests/test_history_printer_styles.py +0 -146
- comate_cli-0.12.5/tests/test_image_chips.py +0 -173
- comate_cli-0.12.5/tests/test_jobs_panel.py +0 -1094
- comate_cli-0.12.5/tests/test_jobs_picker.py +0 -732
- comate_cli-0.12.5/tests/test_resume_picker_exit_safety.py +0 -70
- comate_cli-0.12.5/tests/test_tui_loading_tip_rotation.py +0 -171
- comate_cli-0.12.5/tests/test_workflows_panel.py +0 -769
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/08b40bf6a68c85059572f3478db27d848acd36a6e8c6b89fa5173927210e7b53.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/0ff4f2f1382d2c19ca8d86e01ee8b6768b2fa925bdcf1e57829cecc590120371.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/1571cd767eb43ae39534d8f53f60bd56a2a537a64ecf8b5d93ee7556ea4cbb54.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/19ac2280798d9988d4bd8e29952989eabf0749b893d4026bf9786169cd50c659.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/24efc545d3f0b694a02cfa8022b8f93be27e57547a4f0661f608c80d9bc78113.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/3d69373ac48a465a06bd30094e4c28921c1201865c27dc0f012768799351c10b.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/46c7def792f8820aff04a0083057d32079d7ccc208e394eb00a440618f4455ba.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/594a10eddaf1ea6344dc62d41af7146f6e52471ccf1ee1fba6e61376c3ba5bce.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/5e4d793a1bc3ae3b2c7fedb39645e04d3bd6a86ceb064ba99746d6164034942d.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/6a28b28d04d8cf003fc6e41560ad05af138aecfdb0f7f9978bf12a1d3b4e353a.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/8e9d29f51d07bd7d9cd02aae2cc12c1bd575f3748f6a2b9065dcad75973c1e90.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/954f324b297d871035343be09391bc7c5e0df38faf3f4a3a92be92685a9ad4e3.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/a58d73b67de68741d8e4e9e7d212a7e98a7db0b864113fbd2b9056b166095c85.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/b44535f54c0d62ce9f9fa3a673ccff0f6d17086dce54787da0f8ab910c2ed1c9.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/b8f6674b359865d1c0880633f552a30210a60d30d2c11370e9ab0457f65f75a3.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/da3d0964cd50a338b3dedc5212ee6d4d045c04629f62a0e948c905c3ec27ab4c.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/dfc071d5c7a17280f23b1875b16a0f38ff61736e5985b2c9e3056f741f17bd5d.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/e12f27ecae32f087ea8696b8061c42facb63a91b2b100568f3602cc2f0b6ce60.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/bash/fe60ed7a2e79c21b81416fa2e77c827ea64df5ba5b6cd343a9b423731dc15b4d.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/glob/dc28800ddef1229e5c0bd125335ab31d85d5f8aba0ff2713d09829671b70f2ec.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/glob/e6fa077dd5e2e19045abf084f97dcfbcbffc1571967a0243ca40ff996d8bc9f2.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/010b7d94484960699c5c28b5d2ea86d53c2d998a78141c75b834409de64bf25c.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/0193f8465b3eaba72bb4f4f78d0376ca89a09d96e87bb9b63c4543023c6b5516.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/021a341ef368f43394d1e54f24c5865c84aa9f6cbaeec777d0a09ca5431af82b.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/03edbaec20870710ae8531b002c837e2c092d53ed8b544d05330cf5fd699dcb4.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/0499bd5aca13709d7ad1c6ad597adf8ca169359342fec01b6dacb83005854de1.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/09c695b86ba43584b134ed6ee26cbe023f58551e579158cf94790644ad6aaa53.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/0b96a0a521f9d4c0a88fc75a2e5f69e4c4b7be8ea5d73599eab390c88d4098d8.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/0ba5851c04aaa37f25f6b0a37daa3522754d7865e79b3abf0daf8fca54fc07f7.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/0beb89f407f205d5b2fdb075c98869ffa5db8e2a3687706e06399d3f58a3278f.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/0bf5d9171b6ec0a61962ae22ce8109a26abf764c031ddd5c8dcad25c678020ec.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/0db7a1bd5eb18329885082bc554f4456a5c254b687c25c2b3611a364634badd8.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/0dd1a484cf5b506de9a8e85db9c9156e7623bc633c07d8805d83768edf1d1b68.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/0f48a977857dc6fe0658c5341b8b409205bb6391cc458d19d18f06b1c37e3b8c.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/1194ded949e902bc25be21bfe63952a98381416bed255dc052b6715ebb81f11e.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/134f90a9b26f8bbc6fc602c3a1301623823abec5cb8eb9680ea060bea5d78b07.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/1461fb3572a606968e5d9738ec65dfe0cf4616ead5696f2b47dd36dd12cd8346.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/14d7326d6dc701ca7e331efa97cede45e6b53b98c5f1a784d438db4bccb2853a.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/14f7537d8a7090ad8f6531bd9ecfadd9d727f2bf0c620afde878e8765d596cc8.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/176241ffb6774d19531593769c50349debb431f8c888f8e4fb46178af6f8f9e6.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/17e25775e4ce9b0fcb34b7af659d7d72f53262b1b59c21190f450c4eda8bb6a2.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/1a9cea8b7b788598502df8771b6c03f6b393613e1d911f04959ec59f3b7e9869.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/1b2ee53405771f837aa234d5a8d128c3f1fd6f16306ec5c71e30df1a55f0eab8.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/1c265542a4a6dac9cdc557ba271a9022d5f5bfa044d7ae4201a302ee59517542.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/1cf1dda756728f6ba6712be0349c949ac8487d9515bfd8f8941cd53fd96bea76.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/1dd72f0779d1616cc4683de1565d1cc4242dee18987cfe5c9ead6ec445ab952f.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/1f0f6484841d5396cfb19f060ada806f54d62594a2a6f81af4ed70d379bdb82e.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/1f4854573b520c1a6e0fb4cd8488263f823a61a6867e4c7d92cdce74b4cb4d1b.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/200787ede572c7eee4ff7cd579a936b8ab0ecf6f25bb2f6ac89dbd04fdac1ef7.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/212ec2839d46d8d2f64dbbb9e0a4ed8b962178113fe8dfc1f29ccbc02fd46e14.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/22fb4c5aa3fea197c71b90824449eca45095da4bd1c7bc76dbfb689abcd5cc49.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/2932089e3759921321ff908eb7998bb849c234380e04f3f7a5171fc9f432ef2f.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/29cd9403e9ab3dac5cc3a95fa0ede278decb57cf7183eaad8e29aed9903aba26.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/2aa8195d533da9ee878d5ff7e7c4574ad9dc54c57e85f0be801d9aa5ba7e9d65.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/2df4412a93598e76038f722e112a5519bbca58e31a27a471346aecf3c5d486b8.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/2f04b6777f986f64bbdcdd828eb4a7fa5aa67872fc0d61e891d2af9ec51a6fb8.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/3114f2804efe81842b21a85a4bc9eb2ef9f975c28e9220564e6cd2185fed11f7.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/3240cf436c636223d89029d2859dc8b8bbc059ea3b8b9a3cdcececb6e75d6da9.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/3a03ca37d32ea15316bb77147116bf8eeaa55ea255b7819f1b6350e80cd38481.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/3b2c13e633a6c9633f53342cc76ec87e4863d24fde2312e88b1bd546e194666f.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/4274f27741d2a37b85ea968754ede69180f59300532f1c8e2c8bcc6cb57d93f8.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/42c75defbb53e48d8521927f945412100cd487ad492ee1a57a57df3f64831096.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/435267ab04edbf55d21c169170faf8eca36f065abb282e9fd731cbf500763757.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/448d3ded3b00200238f3782ed0fb5fbe30166139308cfa6cd3e31867f3cf941e.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/449ac499b090311eb8b5594f7646d84f67e9da1fad4ad968b772d4d8ab404141.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/45f0d5dda63863f163106fbf234ba98c6b2ba88ee63c308b922b6b18b9d6d179.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/48a5ea12ce666954aeb22afab26d199f9ceb7c5db99531077bed0298837a4777.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/4d6a33d9eaeb38ed7558b7e0162b399580b211cedefdd2a4126b6363b0616b9a.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/54822f93bd0f279a2dc67f57f4b49a549938346f606c3ea62f76573ed7c19729.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/5529a626789de692d52c89bc7fc6a60cf8f97522641ca7c20459f76a3107f841.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/5592b8582682415bf399fd16bc4e354a8af6979acc7ee5f7d8161b6a2a090a6e.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/5697b946b47f9c271273606510662d25c579a1c3cd66a3f73f845178626adf8c.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/571cb6737be8d74e05976da2ba022ea1a5e191bdfeafa40b22834b61aca984ec.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/592ea99ad61dc416029a0a68a9ea47c765d706d7ffbae9cd697405da2dd8a9ec.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/5c0df9216c4f53dc1c2d786266a137dbe326ab4363ddc40307fb21a00a9f94ac.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/5ce22f90e1ec6217b95997fad94cc926c12ffdd6f3ef3e278bf0b89ecbcc6d62.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/5dc1de7af87cb4091467bc5f0265745e602853afdc3863c267b6e90a26f412c9.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/5e648bf7034fb52a2216f915aa95cfa96f6f5038e27f521266a23f2d800fa5bc.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/5fff0b4efc09b785f1ee5dee2e5d7ad4e247bdb9c93f41b5814c9db1c04cb8d7.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/6249573679ee1a300a25baec32ea72ee34eeffb45f73f676cc0b0f0d11a2d31d.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/6258f866ee46c82b3b4584aafd49625b86793f1324318970124c849013397865.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/640e6e9edd64f8ed1f4928e9af1f9890c17386cdbc86d329cc2256628e7c50bb.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/643717af84fd6f09302e9656f696f853b85dc10bdd144cc4b3ea064c0ee39056.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/65ed38867aa3162db6899d4f1b76907655d6af699cff567e2b776ec997f65b9e.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/67196d9894f03b07594d654caf016388b13842a7b3d11466a7b7532727d11bfa.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/6775046194b93d29bf37cb7185f9b808ebd4938f14659e76bfe2daf6dcbbb135.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/68ac5bf6206064b6d2d7c44f800cc58795c9ea0362132c438fa33c53b9586aa9.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/6c6f4e1f9e1d09af3d8a7c10dd243df92781e6ebbbf4f1215c189d74b7a16e01.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/6cfadf5d61982d2bb941416d5fefc22202df0bd4dde584321be50716843f2a4e.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/6dbade43d62180ae1367c70744d985615fe64768efba5c77317ea4c349aa7958.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/6e20e5b86fbf934bbe180ab38a81e259006f0fc43b4d650820994dea3ead8075.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/705ec2d0ab89a76fbc02a18d23d8bf10b26eebd5144911cb398e46e2374524cf.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/73f1fdec89c242b1c28093dcc12e830a4467c5c5197286879a25feda693b3ede.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/745e2b17c9b412d9d89d380626ceb2eb088b2d24e1a4f26be948061a8daaccdd.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/74bf1dc40d9b884a5312567e5bc923389e9bcd10e9efa1eb87a01c50b1e11ef1.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/758f6bd9fa04989fe968fb80567eb4a4d028e9dd6ca9c482c0a919a7c9da6dad.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/762dfb3969ac05cfd8ed58ea34abea8b4e4756ec5c8ef7496e49bb6f824439af.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/7880b26ed67f9abd746b4e5c7ccc009f97a16cc5245b4fb04e9e51faf2e99b43.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/7b530ebb0d7be5cb364886c326ac09fedb208520170ec424c0d66f2a049cd735.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/7d4e0f51f0fa21846dfda5ceebb79cf53d0e8abf1b2f86ecd09ddf06f85cd3bc.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/7d79d72b0ff97ae7703118b1c3edc22a3e9aad968baaeb1210281e1b3e0fdf75.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/7f6ae5a9bc2404aef026b13c8a360c1c687ea1c1509b65429239928d9f8560bb.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/81d4cf35489f009f64aba1f01c0a9c73ac256391d5369dbbae2b3f92c912afb0.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/8261ffc4381d4293b7675eabe7956c75c75890e45387cbfba52dd2f1fdb12939.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/84edad480d7623c75eb5026afb01a8381f7ed22a15ba43ddb89107821ece3893.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/89124ab34d06feebcf91d5fa7fd8d3f36493f0d62ae79b0f339f87a229333a3b.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/8a1456d96d430228501f6c305ba67912312bfdd48b2841e2456160a02498ea5b.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/8bc79492c38d7124f4214f0437350fb1cfadaf6635bc4391c69fe64c6e8f6096.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/8c95072ee427abdb9a07444bf26dc78e72cf93ed9e898d77dd9aa643f6f5b913.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/8df1e210850f75543f8fb545a963ec57b161dca48a8deba2241611dd6b9fd4eb.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/9388950ba2ced7980db5beb500eec752bdf25fbe59b6a95ed8c3bee218e5fb58.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/97081bbfef1b6bbdfa1d160d122767a871db324afd40d2f3c625f9cd8b2e23f3.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/98060d6195be5fb98d6098eb947853a25a305bce1ebf5a4218ffb791379b9dc6.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/98b2832dd79c7972eb441b3102f1f6aa40ccb867d7771ec238142564a3b4a117.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/98b76a32c3a05f7d91b8b81518f28b613f7ccb373575858fd6aa2711ddbc382e.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/9a5fd2d8be3b1e8ef2343f9a19bd75adba3687b2cb8234ee341d6cdc3ab1f361.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/9c80158f162aadb87f84195c4496a1c24f68ceca3535852835de9cf4e428d028.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/9d34f05ccc7150bc7a1878d112f08fafbaa4d4e420dbd7f1129dc1046c697e39.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/a9594b8f4f25e5b378fcc883960fa7afb2dea9d80851cb5d52f18d856be95219.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/aa8a10a861a188abbbbbe27b7a52f539442bb273a1ad9b1aa1c31910cfad5561.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/abacaab899684c1677f97720dcfc4a6c1fbf98d2cfa44e25f040959586ccaa20.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/ac65e45db9f2c51a484173eb31b907c1cb007c5cacca21396790f5345968ca72.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/ac8641710e4c96567edad6364d218a08630ff20af9f075f61c20d013f9369648.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/ac94d3b218537471b6ac89a8da0c454d9d25801ffd4c88ea862bf0893c5e0812.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/ad798be6fa338bd3ee7fc49048192e39d3b2b78837051208815b817e5ca96793.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/b04c0955b68f788125018525e308e82987ada00d3943e21cb159f577319ccf11.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/b1b9c6d1eefe14c5076aa214fe4f98242f99ed9b146214d0305224539d8e78a1.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/b28aa6d5d336c7da99b72949fa0e09580cde07499cb1d7e611f14e2b426fb9fe.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/b39bb289db5f9e4f31c67766f5e08333d10f384a2d5f6b71fb44522bc4f17f80.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/b64736bbdd8fe7ca1ff2ef98558f16f145ca437255ccebca44bf1041b0afbd55.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/b898cd80aa00ebdfda4ef314a4e245e62ee96c21935a7f332243a67b0072d1a0.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/b9c8c69d370fcd4291d5d1ed72b9f823df340a9d4f904c3965cca93c257294f2.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/c11eb234db46678fa7ac871e396a067c238bd37414fad52e3be433933ffe7878.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/c1a4508b9a74b3d1649f25dbd474780e6212ced036bbca6b4aac06d324ff10e9.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/c3c33582bb37fb71235e9d0fd2b8d2cc8c926cfcb014261356ea917db6417ebd.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/c42bd0a52664189ec6fafa76458456048c5c73907bbadddd205371b55def9393.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/c63907ae1cb41e59de75df3d6e0dff27db2ce2434cac5f283a428e4fd9bee301.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/d2402b2d42c975305d4866353935ce285eb67ff7f2a2d74ee9be559d022c86f6.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/d4e8e439058ef24fb0671ee6674a5b854c17e0b93b012d2dbe8ed85928afe560.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/d8c8f51da7a2bc8977320248883adabe9a4d9da131e99f7dfe18a9c826b1c8b1.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/db71617421ab524615206740825824b73f3c407c93a18e2a01d8c80789c02b3c.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/dbd79a71f323da5dc1570d5c8d6b99e73b642128697b6c51ab240379fa74f763.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/de09b36cc3fd06274fcdbfc7d431f170afe40b4fa8ddd5c0a281581ee03eabec.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/dfd45c97a1da7d27da6790c1b24048f584ed4f831e971cf3f4c366b7d8687980.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/e138fb7f4303433003aeeaf67b15d783b253696d3d24fd7dfacc50f619db04fd.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/e1ca31c715894314164641ba9d80dc13f7e8e146e8f77a995bc3650057ee3ba3.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/e6f0fb5f2688faeaa4875724c32f27e79d8a9710bbb91d2a950b84b3481fc374.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/e707578cd4b2132eae2e3bdfa918555c2a8f1f4ac52fd6dbc6fc9a347c44221b.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/e74f8ab779842b213be16f0a58ee7c973c6a4eb4e7c6b56b4087e3016183f8ef.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/e80bedeb209049fe7a38ade5aa7976dc3fe2ecbeb6cd150a8fa44489172d6e9b.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/ea0fc86903a5bd1f02832cc3eed4446d55e16dc7df0298c5d74afa56a89a8ca7.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/eab81978291f4725b9433192c5b7f4b5409cdcdeb80ffab9884c79ef230bdcdd.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/ef7bd4368558b2b411c410c936554d99ecc0f2fe647a970208f8b0c986e3921c.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/f04828b2b54922581d7cde5351807a457896b2940fd748e8d706fd5dc4bed971.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/f04b4f70fe5292dc485164699342c03f3cf4715ba0d5efa815cb7a332dd78c0b.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/f0b079f5b4d5a0be065ccb03a2471835cab5b3fd4452439bbd3bf46d401d8a3a.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/f2012bd41aa48cd2e3f56611f32b041bd41863b681a79d5ff5f515a97e7e1ddc.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/f35c437708355261ca868cf38ade97384e86f24de9aab20849113dc78eb8564c.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/f638dfe4edbde834bd968f4d479c1c535dff1dfac10f3e003ec8673d5eca5864.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/f916ed291897b4afb5f8a55f5e333a53f11540e2ade24f691a7828885aa77a32.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/fa3b737ee93d45bfff6e78245a5ecad2476dc7010c75c772abc1c272cddae072.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/fd1133b3a420133590ffb1c050a65477a4751902ca9b832db1c23a6fb90200b8.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/fe3df7b68f7041d210336363f5b11faf963427dbcf4027172e19db05f7b24fa1.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/ff07c3d10b81977aa6c7769465dbab4754e11bd84225afba1b17eff2824ad28d.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/grep_content/ff6b896f93f2ac018a3af519be3001d1e4c8ca6ef9ae3e051aa646b409b6773f.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/index.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/ls/4f2cd109869e06f70f28f7aaaa3163fea4731bbb92dc4da8ac25177d6f122f87.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/ls/768197391db12061fb74d56cad07e9331db0bd832503b5e40be76b49208a111a.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/ls/a560ae7492ac913282b703abd48897905727acc058d0f9346b17d450f32e1a8a.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/01f0c4c39cc01ec7d59077fa8bfca183cbd6c93d0a7083261f228badca115eba.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/03079608ffe5b120094798aababb67671a20f8466c0197044eacaea56fa12d30.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/08e5d1cdde9e2d6dff5435ee87c6710470709d83c271185eaaaa6d652068d80e.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/10f74765725e10bd94d92eb25cea495ea8cb9d9151397b05b200ed44a852d882.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/3faa3ddc36161e84da99e18707d61b7ffbbbeb8217c28a55a027134f8def5d17.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/45cd4ad764e19e3fc0481b8d8649c235ae51634eb41da0806f9f00ab1bdb640d.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/4fdacfc564ff558dd602f672edfbb4a72494d8e3c8937bcf0a3d15e085c4a0b7.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/50eb11fb5aa96e54b2a7e68c0b9278ec3c07d222bad92270f4a51df58ca69e03.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/5a1f18c61191f6b4c1635363748a2aca49ad2183f046035728b5c23ee3df1123.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/72718c187cf24910d3c21d7e719e004efa27b4f5d7315bbe2b9a33e2494cc0f9.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/7fa851f7100b6e3e652604de11be2767b7a679aea40e941b0b1218478e5935ed.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/9d3ace7b725f6aa5809ca4bc298c5ac3d022cb92c29684c7709d63c9c5fd2ad4.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/dbeea3cc8bd22fdb703675e202063e7f4ce21ef00c5c83f74268cd6328ad912d.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/tool_result/ea66ecb02621262c26d0368c108d2f2f94e2d1f75dea6b38bf958c5bdbaa2ee7.txt +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/webfetch/2669c40a92ce6395790ae997503be646bdc3af4a49f799b38d8380e5ecd1e015.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/webfetch/5701edea87e370ce51349413bcba507833f48f2ad7337eef3deccc82c7d45a8d.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/webfetch/5c0eeec3d9ab0a6881d12ebd5a95b6b71b90d47640e38c914232d75704332f54.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/webfetch/80baa6870df61f51b68fadde829aa2ab889fd487f8a8171db36ea3b67ded24db.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/webfetch/915acd44f3846631527a3cd62e81d9908bb7e8769b970208ffa3326c65df8778.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/webfetch/a758c9f6242610e875e36aed11e99ac337359cbe512df15db6544504fa9e68b8.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/artifacts/webfetch/eca7d820f7461f58ee9b2b1e931842de54cd1ec023eca7a27e3bfb387efc6aa2.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/scheduled_prompts.json +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/SKILL.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/html2pptx.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/mce/mc.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/scripts/pack.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/scripts/unpack.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/scripts/validate.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/scripts/validation/base.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/scripts/validation/docx.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/scripts/validation/pptx.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml/scripts/validation/redlining.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/references/ooxml.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/scripts/html2pptx.js +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/scripts/inventory.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/scripts/rearrange.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/scripts/replace.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.agent/skills/powerpoint/scripts/thumbnail.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/.gitignore +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/README.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/__main__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/device_identity.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/distribution.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/animations.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/approval_bridge.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/approval_content_preview.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/assistant_render.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/backend/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/backend/announcements.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/backend/client.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/backend/feedback.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/backend/provider_snapshot.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/backend/rating.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/backend/runtime.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/backend/session_report.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/backend/session_title.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/backend/tasks.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/bash_command_display.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/builtin_commands/.keep +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/builtin_commands/commit.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/builtin_commands/implement-plan.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/builtin_commands/learn.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/builtin_commands/open-pr.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/clipboard_image.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/codenames.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/config/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/config/edit_session.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/config/model.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/config/picker.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/config/picker_state.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/config/store.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/config_check.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/console_profile.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/custom_slash_commands.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/effort_menu.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/effort_ruler.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/env_utils.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/error_display.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/exit_confirm_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/exit_watchdog.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/file_ref_hint.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/fragment_utils.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/goal_edit_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/goal_resume_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/i18n/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/input_geometry.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/layout_coordinator.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/locale.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/logging_file_handler.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/logo.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/markdown_render.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/mention_completer.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/model_tier_style.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/output_style_menu.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/auto_update_runner.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/auto_update_store.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/components/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/components/detail_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/components/plugin_list.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/components/search_box.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/components/tab_bar.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/operation_state.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/tabs/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/plugins/tabs/errors_tab.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/preflight.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/preflight_wizard.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/preflight_wizard_ui.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/question_broker.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/question_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/recap/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/recap/controller.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/resume_preview.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/rpc_commands.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/rpc_relay.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/rpc_stdio.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/rpc_ws.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/scm_request_status.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/selection_menu.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/sigint_guard.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/skills_menu.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/slash_commands.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/startup.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/startup_profile.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/statusline/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/statusline/model.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/statusline/picker.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/statusline/picker_state.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/statusline/store.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/stream_pacer.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/suggestion/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/suggestion/controller.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/synchronized_output.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/text_effects.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tool_fold_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tool_result_state.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tool_result_store.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tool_result_viewer.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/transcript_viewer.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/approval_queue.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/btw_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/mcp_connecting_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/resize_guard.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/run_clock.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/tui_parts/slash_command_registry.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_agent/ultracode_keyword.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/terminal_title.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/comate_cli/update_cli.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/dist-comate/.gitignore +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/dist-comate/comate_cli-0.7.10-py3-none-any.whl +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/dist-comate/comate_cli-0.7.10.tar.gz +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/dist-hico/.gitignore +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/dist-hico/hico_cli-0.7.17-py3-none-any.whl +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/dist-hico/hico_cli-0.7.17.tar.gz +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/docs/cli-rpc-stdio-guide.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/docs/release-notes/0.12.3.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/docs/startup-performance.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/docs/superpowers/plans/2026-07-07-tui-first-repaint-before-sdk-submit.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/docs/superpowers/plans/2026-07-07-windows-update-manual-rollback.md +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/_fake_anthropic_server.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/_rpc_ws_client.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/config/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/config/test_config_exit.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/config/test_edit_session.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/config/test_model.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/config/test_picker_state.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/config/test_picker_ui.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/config/test_roundtrip.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/config/test_runtime_settings.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/config/test_skills_denylist_migration.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/config/test_store_load.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/config/test_store_save.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/conftest.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/fixtures/exit_watchdog_child.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/fixtures/fake_mcp_misbehaving_stdout.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/recap/test_idle_recap_controller.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/recap/test_recap_history_rendering.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/recap/test_tui_idle_recap_integration.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/statusline/__init__.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/statusline/test_model.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/statusline/test_picker_state.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/statusline/test_store.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/suggestion/test_next_step_suggestion_controller.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/suggestion/test_next_step_suggestion_render.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/suggestion/test_tab_accepts_next_step_suggestion.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/suggestion/test_tui_next_step_suggestion_integration.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_animations_styles.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_animator_shuffle.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_config_check_gate.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_exit_lifecycle.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_mcp_preload.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_mcp_preload_kick.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_preflight_gate.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_pty_ctrl_b.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_pty_ctrl_c_exit.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_pty_shell_mode.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_pty_smoke.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_shutdown.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_startup_order.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_token_cost_config.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_app_usage_line.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_approval_bridge.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_approval_content_preview.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_backend_announcements.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_backend_client.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_backend_provider_snapshot.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_backend_rating.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_backend_session_report.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_backend_tasks.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_btw_slash_command.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_builtin_marketplaces.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_busy_slash_gating.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_cli_project_root.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_clipboard_image_reader.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_compact_command_semantics.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_completion_context_activation.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_config_check.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_console_profile.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_context_command.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_context_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_ctrl_b_background.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_ctrl_c_clear_input.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_custom_slash_commands.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_device_identity.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_distribution_contract.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_drain_frame_atomicity.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_effort_menu.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_effort_menu_frame_rate.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_effort_ruler.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_effort_slash_command.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_errors_tab.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_approval_wait.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_boundary.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_budget_floor.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_e2e.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_fixed_overhead.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_idle_prune.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_log_boundary.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_log_queue.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_provider_overflow.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_shell.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_stream_pacing.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_stream_staging.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_tool_args_progress.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_event_renderer_tool_fold.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_exit_confirm_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_exit_watchdog.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_exit_watchdog_subprocess.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_file_ref_hint.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_format_error.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_goal_edit_handlers.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_goal_edit_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_goal_paused_hint.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_goal_resume_tui.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_goal_resume_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_goal_slash_command.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_handle_error.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_history_printer.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_history_printer_subtitle_position.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_history_printer_tool_fold.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_history_sync.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_image_preprocess_offload_lag.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_import_weight.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_input_behavior.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_input_history.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_input_separator_counter.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_interrupt_exit_semantics.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_key_bindings_system_messages.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_layout_coordinator.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_loading_line_fragments.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_loading_modal_suppression.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_logging_file_handler.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_logo.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_main_args.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_main_args_yolo.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_main_profile_entry.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_markdown_render.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_marketplace_add_commands.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_marketplace_install_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_mcp_cli_scope_defaults.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_mention_completer.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_menu_panel_pty.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_message_style.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_modal_freeze_timing.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_model_switch_command.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_model_tier_style.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_no_raw_colors.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_output_style_slash_command.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_permission_mode_cycle.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_plugin_auto_update_runner.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_plugin_auto_update_store.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_plugin_auto_update_tui.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_plugin_operation_state.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_plugin_slash_commands.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_preflight.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_preflight_copilot.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_preflight_wizard_ui.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_pty_output_integrity.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_question_broker.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_question_key_bindings.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_question_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_resize_guard.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_resume_preview.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_rewind_command_semantics.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_rpc_mode_logging.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_rpc_relay_dial_out.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_rpc_relay_e2e_smoke.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_rpc_relay_process_smoke.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_rpc_v4_stdio_smoke.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_rpc_v4_ws_smoke.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_rpc_ws_bind_failure.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_run_clock.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_running_tool_status_line.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_scm_request_status.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_scrollback_write_encoding.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_selection_menu.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_session_auto_title.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_session_query_token_summary.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_settings_write_guard.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_shell_mode.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_shutdown_noise_guard.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_shutdown_noise_integration.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_sigint_guard.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_sigint_key_binding.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_skills_slash_command.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_slash_add_dir.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_slash_argument_hint.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_slash_clear.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_slash_completer.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_slash_registry.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_startup_import_budget.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_startup_profile.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_status_bar_mid_turn_refresh.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_status_bar_request_status.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_stream_pacer.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_stream_pacing_tick.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_stream_staging_panel.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_style_class_coverage.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_synchronized_output.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tab_title.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_task_panel_format.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_task_panel_key_bindings.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_task_panel_rendering.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_task_poll.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_terminal_title.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_theme.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_todo_panel_busy_gating.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_approval_key_bindings.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_approval_tui.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_approval_view_workflow.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_call_protection.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_fold.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_fold_panel.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_fold_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_result_formatters.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_result_state.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_result_store.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_result_viewer.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_result_viewer_key_bindings.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_view.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tool_view_styles.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_transcript_viewer.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_transcript_viewer_record_matching.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_transcript_viewer_tool_fold.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_builtin_slash_chain.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_deferred_prewarm.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_elapsed_status.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_esc_queue.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_exit_idempotence.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_exit_paced_tail.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_exit_pending_logs.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_hot_reload.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_image_chip_seed.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_image_path_upgrade.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_interrupt_queue_recall.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_llm_retry_panel.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_local_interactive_barrier.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_mcp_init_gate.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_paste_history_persistence.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_paste_newline_guard.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_paste_placeholder.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_plugin_load.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_provider_error_shield.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_queue_preview.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_replace_session_resume_hint.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_scheduled_fire_log.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_session_observers.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_shutdown_cancel_propagation.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_split_invariance.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_startup_latency.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_surrogate_repair.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_thinking_display.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_tui_window_too_small_fallback.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_ui_mode_derivation.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_ultracode_keyword.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_ultracode_keyword_frame_rate.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_ultracode_shimmer_render.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_update_cli.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_upstream_surrogate_merge_characterization.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_usage_command.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_wellformed_terminal_input.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_whitelabel_clear_logo.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_windows_sigint_console.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_workflows_panel_model.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_wrap_user_text.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tests/test_zipapp_launcher_path.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tools/diagnose_windows_shim_rename.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tools/logo_lab.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tools/nico_preview.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tools/probe_conhost_char_width.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tools/probe_conhost_render_replay.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tools/startup_bench.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tools/transcript_viewer_bench.py +0 -0
- {comate_cli-0.12.5 → comate_cli-0.12.6b2}/tools/verify_windows_self_update_semantics.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
### Added
|
|
6
6
|
|
|
7
|
+
- Interpreter Migration(macOS/Linux):CLI 不在 Python 3.12 上、并且没有待更新的新版本时,第一次启动在界面之前显示一行提示,之后的启动显示全屏提示,只有「立即迁移」和「跳过」。「立即迁移」把**当前版本**(`<包名>==<当前版本>`,带发行版的安装参数)用 `--python 3.12` 重装,成功后提示重启,本次启动停止;失败只显示一行原因(uv 输出的最后一行),继续在当前 Python 上进入界面。「跳过」不记住,下次启动再问。已经在 3.12、editable 安装、PATH 里没有 uv、Windows 都不提示;有待更新的新版本时只显示更新提示(接受更新会顺带迁移到 3.12)。文案四种语言齐全。
|
|
8
|
+
- Event loop 冻结看门狗:界面动画 / 计时停住超过 2 秒时,独立线程把主线程当时的调用栈连同最近的首轮阶段名、busy / staging / 动画状态写进 `~/.comate/logs/agent.log`(WARNING),同一次冻结在 2 秒、5 秒、15 秒各记一次;默认开启,设 `COMATE_TUI_LOOP_WATCHDOG=0` 关闭。原有的「TUI event loop lag detected」日志现在带阶段名,且空闲态(无请求、无动画)的停顿超过 2 秒也记一条 INFO,不再静默(阈值 `AGENT_SDK_TUI_EVENT_LOOP_IDLE_LAG_THRESHOLD_S`)。此前冻结日志只能说明停了多久,说不出停在哪,多次 3–37 秒冻结因此无法归因。
|
|
9
|
+
- 思考时长:隐藏 thinking 时,一段思考正常结束后,loading 行括号里的呼吸黄 badge 换成静态暗灰的时长短语,显示 3 秒后消失。短语与 badge 逐档对应:`thought for 8s with high effort`(max / xhigh / high 同句式)、`ultra thought for 8s`、`thought for 8s`(medium / 无生效档)、`thought briefly for 8s`(low);60 秒及以上显示 `1m 5s`。不足 1 秒、中断、stream 重试、思考中途打开 thinking 显示、turn 结束时都不显示。固定英文,不随界面语言变化;不写 scrollback。
|
|
10
|
+
- MCP 工具搜索(SDK):MCP 工具很多时,工具 schema 改为按需加载——模型先只看到工具名清单,需要时调用内置 `ToolSearch` 加载,下一步才能调用该工具。默认 `auto`(延迟候选 schema ≥ 生效窗口 10% 且数量 ≥ 30 时启用),可用环境变量 `COMATE_AGENT_SDK_TOOL_SEARCH`(`auto` / `auto:P` / `auto:P:C` / `on` / `off`)调整。首次启用时终端提示一次;`/context` 拆分显示 MCP 工具与已加载 / 延迟候选数;单个 MCP 工具定义超过窗口 5% 时启动后警告。comate-cli 与 comate-rpc 的 `comate-agent-sdk` 下限抬到 0.12.20(SDK 同步升版,新事件 `ToolSearchEnabledEvent`)。
|
|
7
11
|
- 规则双目录(SDK):条件规则(带 `paths:` 的规则文件)现在也从项目 `.claude/rules/` 与用户 `~/.claude/rules/` 读取,Claude Code 里配好的路径规则搬到 comate 下直接生效——Read 命中路径注入 reminder,Edit / Write 预检同样拦截注入;user 层受 user setting source 门控,项目层受 project 门控。同一层级内 `.agent/rules` 与 `.claude/rules` 的同名文件(按相对路径)只加载 `.agent` 那份,被遮蔽路径记 info 日志;用户层与项目层之间不去重,两份都加载。`paths` 支持逗号分隔字符串(`paths: "src/**, lib/**"` 拆成多个模式,剥掉首尾空白与引号),YAML 列表形式不变;rules 目录下指向目录的符号链接跟进(做环检测,同一真实目录只进一次);`.agents/rules/` 不读。目录、去重、逗号、符号链接四项改动作用在统一扫描入口上,常驻规则同样受益。
|
|
8
12
|
- 技能扫描根加入 `.agents`(SDK;含 CLI `/skills` 菜单来源判定修正):`npx skills add` 装进 `.agents/skills/` 的技能直接被发现、可通过 Skill 工具调用,`.claude/skills/` 下指向它的符号链接不会让它列两次;运行中再装一个,下一轮用户输入后热发现也能看到。扫描根顺序即优先级,同名先到先得:项目 `.agent/skills` → `.agents/skills` → `.claude/skills`;用户 `~/.agent/skills` → `~/.agents/skills` → `~/.config/agents/skills` → `~/.claude/skills`,两层各受对应 setting source 门控。四类扫描根下以 `.` 开头的子目录一律跳过(不当作 skill 也不当作 namespace)。`/skills` 菜单的同名去重与来源判定改按真实路径(扫描根与 skill 目录两边 resolve 后再比),符号链接 skill 归入正确分组、不再兜底成 user,project 组副标题自动列出 `.agents/skills`。
|
|
9
13
|
- MCP 工具停用(SDK 部分,菜单在后续版本):`.mcp.json` 的 server 条目新增可选字段 `disabled_tools`(字符串数组,写 server 自报的原始工具名,精确匹配、不支持通配符),列出的工具不再发给模型、子 agent 点名也拿不到;没列出的工具与 server 新增的工具照常加载,名单里写了 server 不提供的名字不报错。代码里传的 `mcp_servers`(含 `type: "sdk"`)认同一个字段。新增存盘函数 `comate_agent_sdk.mcp.set_mcp_server_disabled_tools(alias, names, *, scope, project_root)`:只改该条目的这一个字段,空名单即删除字段,对 `{"enabled": false}` 墓碑条目报错。新增 `AgentRuntime.set_mcp_disabled_tools(alias, names)`:会话中途改名单,不重连任何 server,下一次模型请求生效(实测 3 台 × 50 个工具单次约 2.4ms)。一台 server 的工具全部停用时它保持连接,但它的 instructions 不再发给模型。旧版本 SDK 会忽略这个字段并加载全部工具。
|
|
@@ -68,6 +72,9 @@
|
|
|
68
72
|
|
|
69
73
|
### Changed
|
|
70
74
|
|
|
75
|
+
- Self-Update 固定到 Python 3.12:`comate update`、启动时的「立即更新」、Windows 旁装,以及 Windows 自动路径不可用时显示的手动修复命令,都让新版本装在 Python 3.12 上(uv 命令带 `--python 3.12`;机器上没有 3.12 时 uv 会自动下载)。原因:uv 在读包之前就选好解释器,并且忽略 `requires-python` 的上限,所以以前用户会跑在 3.11 / 3.13 / 3.14 等不同版本上,而且不带 `--python` 的重装会把已经在 3.12 上的环境换成别的版本。白牌发行版在 `install_args` 里自己指定了 `--python` 时,以白牌的为准。`requires-python` 不变,3.11–3.13 继续支持。决策见 ADR 0055。
|
|
76
|
+
- 简中用户更新时,uv 需要下载的 Python 改走国内镜像(npmmirror 的 python-build-standalone),不再依赖 GitHub;进程内重装和 Windows 旁装都生效。你自己设置了 `UV_PYTHON_INSTALL_MIRROR` 时以你的为准;其他语言环境不变。
|
|
77
|
+
- resume 选择器的预览键由 Ctrl+V 改为 Ctrl+A:VS Code、Windows Terminal 等终端把 Ctrl+V 截成粘贴,按下后剪贴板文本会落进搜索框,进不了预览。搜索模式下也可以按 Ctrl+A 预览,Esc 或再按 Ctrl+A 关闭后回到搜索框,搜索词保持不变;代价是搜索框内 Ctrl+A 不再移到行首。
|
|
71
78
|
- 0.12.4 测试版里的随包 `/pr`(别名 `/mr`)改名为 `/open-pr`(别名 `/open-mr`),功能不变。原因:`pr` 是常见的第三方 skill 名,旧名会挡住用户自己装的同名 skill。`/pr`、`/mr` 不再有效,也没有改名提示。
|
|
72
79
|
- 用户装的 skill 现在可以覆盖同名的随包命令(`/commit`、`/learn`、`/implement-plan`、`/open-pr` 等):`/<名字>` 调用 skill,不提示,和 project/user 自定义命令覆盖随包命令一样。skill 只占了随包命令的某个别名时,随包命令只失去这个别名。skill 被禁用或随插件卸载后,随包命令自动回来。`user-invocable: false` 的 skill 不占名字。核心命令(`/help`、`/model` 等)与用户自己写的同名自定义命令仍然优先于 skill;这种冲突改为每个名字每个进程只提示一次(以前每次启动、切换会话、加载插件都会输出一条英文 WARNING),提示按界面语言显示,并说明模型仍可以通过 Skill 工具调用这个 skill。见 ADR-0038。
|
|
73
80
|
- 思考被折叠时,loading 行括号里的呼吸黄短语不再随机挑,改为按这次请求真实生效的思考档位挑词:ultracode → `ultra thinking`、max / xhigh / high → `thinking some more with <档位> effort`(如 `thinking some more with high effort`)、medium → `thinking`、low → `light thinking`;auto 且模型无默认档、模型不支持调档、off 时显示 `thinking`,不再出现低档却显示 `ultra thinking` 的情况。档位取端点降档后的实际值(与 statusline 一致),每次请求开始思考时读一次,一轮中途开 ultracode 后下一次请求即生效。颜色、位置、出现时机不变;短语在中文 / 日文界面下也保持英文。
|
|
@@ -91,6 +98,10 @@
|
|
|
91
98
|
|
|
92
99
|
### Fixed
|
|
93
100
|
|
|
101
|
+
- 切换窗口后运行中的任务被中断、输入框多出 `[O[I`:终端开着焦点上报(DECSET 1004,
|
|
102
|
+
例如 Windows PowerShell 经 ssh 连到远程服务器)时,窗口失焦 / 得焦会发 `ESC[O` / `ESC[I`。
|
|
103
|
+
prompt_toolkit 不认识这两条序列,把它们拆成 Esc 加两个普通字符,Esc 就中断了本轮。
|
|
104
|
+
现在这两条序列被整段忽略,主界面与所有弹窗都不再被切窗口误触发;真按 Esc 照常中断。
|
|
94
105
|
- `comate update` 在依赖包刚发布时解析失败:更新命令只刷新 CLI 自身的索引缓存,
|
|
95
106
|
依赖(如 `comate-agent-sdk`)仍用旧缓存,uv 报 `No solution found`。macOS/Linux
|
|
96
107
|
进程内更新与 Windows 分阶段安装现在都改用 `uv tool install --refresh`,刷新全部
|
|
@@ -5,13 +5,33 @@ Canonical language for Comate CLI command discovery, slash input completion, men
|
|
|
5
5
|
## Menu Panel Language
|
|
6
6
|
|
|
7
7
|
**Menu Panel(菜单面板)**:
|
|
8
|
-
由 slash
|
|
9
|
-
_Avoid_: menu output(菜单输出), history block
|
|
8
|
+
由 slash 命令或 Job Indicator 打开的暂态操作界面,嵌在底部交互带里,不切换屏幕。多个菜单使用一致的视觉与导航规则,关闭后返回对话输入。Menu Panel 打开期间,Status Bar 不显示。
|
|
9
|
+
_Avoid_: menu output(菜单输出), history block(历史块), 全屏 picker(会话内面板不再使用全屏界面)
|
|
10
10
|
|
|
11
11
|
**Status Bar(状态栏)**:
|
|
12
|
-
底部交互带最下方的一行。左列显示 Transient Status Message
|
|
12
|
+
底部交互带最下方的一行。左列显示 Transient Status Message,没有消息时显示权限模式提示和 Job Indicator;右列显示会话信息(模型、分支、上下文余量等)。用户可以把键盘焦点从输入框移到 Status Bar,在 Job Indicator 之间选择。Menu Panel 打开期间隐藏;工具审批、向用户提问、退出确认不属于 Menu Panel,不隐藏它。
|
|
13
13
|
_Avoid_: footer(Menu Panel 自己有页脚), bottom toolbar(prompt_toolkit 的术语,本项目不使用), 补全状态行(与 Status Bar 共用同一个位置,但是另一个东西)
|
|
14
14
|
|
|
15
|
+
**Job Indicator(后台任务指示)**:
|
|
16
|
+
Status Bar 左列里按类别显示的后台 job 数量,例如 `2 agents`、`1 shell`、`1 workflow`、`1 MCP call`。类别:agents(agent job)、shells(bash 与 monitor job)、workflows(workflow job)、mcp(MCP 后台调用)。只统计仍在运行或待命的 job;数量为 0 的类别不显示。选中一个 Job Indicator 并确认,会打开该类别的菜单。它取代了输入框上方常驻的 jobs 面板。
|
|
17
|
+
_Avoid_: pill(口头说法), jobs 面板(已删除的旧区域), 后台任务栏
|
|
18
|
+
|
|
19
|
+
**Jobs Menu(后台任务菜单)**:
|
|
20
|
+
列出本会话后台 job 的 Menu Panel,可以查看 job 详情和停止 job。从 Job Indicator 打开时只列该类别的 job;从 `/ps` 打开时列出全部类别。workflow 类别打开的是 workflows 菜单,不是 Jobs Menu。
|
|
21
|
+
_Avoid_: ps picker, jobs picker(已删除的全屏版本)
|
|
22
|
+
|
|
23
|
+
**Job Activity(job 活动)**:
|
|
24
|
+
后台 agent job 最近一次工具调用的单行英文描述,例如 `Running tasklist …`、`Reading identity.py`。工具开始时出现,显示到该 job 的 turn 结束为止;工具执行完、模型思考期间仍显示上一个工具。固定英文,不跟随界面语言。
|
|
25
|
+
_Avoid_: current tool line(SDK 里的原始字符串 `Tool(k=v…)`,是另一个东西), 工具行
|
|
26
|
+
|
|
27
|
+
**MCP 进度行(MCP Progress Line)**:
|
|
28
|
+
下游 MCP server 推送的最近一条进度文字,SDK 把它清洗成一行。前台调用时显示在折叠容器的嵌套行里,后台调用时显示在 Jobs Menu 的行里。内容来自外部 server,什么语言都可能。
|
|
29
|
+
_Avoid_: Job Activity(那是 agent job 的工具调用描述,由 CLI 生成,固定英文)
|
|
30
|
+
|
|
31
|
+
**Job 结算行(Job Settlement Line)**:
|
|
32
|
+
后台 job 结算(进入 idle 或终态)时写入 scrollback 的一条记录:首行是身份和状态,⎿ 副行是指标和结果。每种 kind 有自己的模板。固定英文,不跟随界面语言。
|
|
33
|
+
_Avoid_: 完成行(它也用于 idle、stopped、dismissed), 终态行(idle 不是终态), job_event(代码里的 entry 类型名)
|
|
34
|
+
|
|
15
35
|
**Settings Edit Session(设置编辑会话)**:
|
|
16
36
|
从打开设置面板到保留或取消更改的一次编辑过程。更改即时保存;保留操作接受这些更改,取消操作撤销本次仍未被外部再次修改的更改。
|
|
17
37
|
_Avoid_: settings draft(设置草稿), save-on-close(关闭时才保存)
|
|
@@ -81,9 +101,13 @@ The display-only cadence at which complete assistant text lines leave the line-s
|
|
|
81
101
|
_Avoid_: typewriter effect (that is character-level), throttling (that is the scrollback drain), rate limiting
|
|
82
102
|
|
|
83
103
|
**Thinking Badge**:
|
|
84
|
-
The short English phrase in the breathing-yellow part of the loading line's status suffix, shown only while the model thinks and thinking display is off. It names the thinking effort that the in-flight request actually uses (the applied level, or ultracode when that switch is on). It is chosen when a request starts to think and does not change until that request ends. When no applied level is known, it shows the neutral word `thinking`. It is a word, not a color: it never takes the effort level colors.
|
|
104
|
+
The short English phrase in the breathing-yellow part of the loading line's status suffix, shown only while the model thinks and thinking display is off. It names the thinking effort that the in-flight request actually uses (the applied level, or ultracode when that switch is on). It is chosen when a request starts to think and does not change until that request ends. When no applied level is known, it shows the neutral word `thinking`. It is a word, not a color: it never takes the effort level colors. When the thinking ends normally, a Thought Duration takes its place.
|
|
85
105
|
_Avoid_: effort badge, hidden thinking label, random thinking word
|
|
86
106
|
|
|
107
|
+
**Thought Duration**:
|
|
108
|
+
The past-tense counterpart of the Thinking Badge: a short English phrase such as `thought for 8s with high effort` that takes the badge's place in the loading line's status suffix for 3 seconds after a hidden thinking ends normally (at a text or tool call boundary). Each effort level's phrase mirrors that level's badge, and the level is the one frozen when the badge was chosen. The time runs from the request's first thinking delta to that boundary, in whole seconds. It appears only for a thinking that stayed hidden from start to end and lasted at least 1 second; an interrupt, a stream retry, turning thinking display on, or the end of the turn leaves none. It is static faint text, not breathing yellow, because the thinking is over. It never goes to scrollback.
|
|
109
|
+
_Avoid_: thinking time, thinking timer, elapsed thinking badge
|
|
110
|
+
|
|
87
111
|
**Tool Args Progress**:
|
|
88
112
|
The `↓ N tokens` part of the loading line's status suffix: an estimate of how large the arguments of the tool call the model is still generating have grown so far. It appears only after the arguments pass a visibility threshold, and it can only move when the provider delivers the arguments incrementally; a provider that delivers them in one piece at the end leaves nothing to show. It concerns the main agent's in-flight request only.
|
|
89
113
|
_Avoid_: token 下行状态 (reads as network bytes), download progress, output token counter
|
|
@@ -170,6 +194,10 @@ _Avoid_: marketplace url (too narrow), repo (only one of the forms)
|
|
|
170
194
|
A registered plugin source, named by its own manifest rather than by whatever the user typed. One Marketplace Source resolves to at most one Marketplace, however it is spelled.
|
|
171
195
|
_Avoid_: plugin store, registry (the registry is the collection of Marketplaces)
|
|
172
196
|
|
|
197
|
+
**Effective Installation**:
|
|
198
|
+
An installed-plugin record that applies to the current project: either a user-scope record, or a local-scope record whose project path is the current project. A local-scope record for another project is not an Effective Installation here, even though it exists in the registry.
|
|
199
|
+
_Avoid_: installed (ambiguous: the registry may hold records that do not apply here), known plugin
|
|
200
|
+
|
|
173
201
|
## CLI Self-Update Language
|
|
174
202
|
|
|
175
203
|
**Self-Update**:
|
|
@@ -196,6 +224,10 @@ _Avoid_: symlink swap, shim update, rename dance
|
|
|
196
224
|
The rule that a completed Self-Update takes effect only for processes started afterwards. Running sessions keep their version until they exit.
|
|
197
225
|
_Avoid_: hot upgrade, live upgrade
|
|
198
226
|
|
|
227
|
+
**Interpreter Migration**:
|
|
228
|
+
Reinstalling the *same* installed CLI version onto the target Python runtime (3.12, ADR 0055), offered at launch on macOS/Linux when the CLI runs on another interpreter and no newer version is pending. It is not a Self-Update (the version does not change), but it obeys Restart-to-Apply and reuses the in-process reinstall path. It always needs the user's confirmation in the launch prompt, because rebuilding the tool environment can break other running sessions.
|
|
229
|
+
_Avoid_: runtime upgrade, Python update, re-pin
|
|
230
|
+
|
|
199
231
|
## Tool Result Display Language
|
|
200
232
|
|
|
201
233
|
**Tool Result Preview**:
|
|
@@ -228,6 +260,32 @@ _Avoid_: discard input (the pre-existing lossy clear), undo (there is no in-plac
|
|
|
228
260
|
A short-lived hint occupying the status bar's left column, dismissed by timeout or the next real keypress, whichever comes first. It is interaction feedback, not history: it never enters scrollback.
|
|
229
261
|
_Avoid_: toast, notification, system message (that is the scrollback form)
|
|
230
262
|
|
|
263
|
+
**Loading Tip**:
|
|
264
|
+
The single faint line under the loading spinner while a turn runs (`Tip: …`). Normal tips rotate through a shuffled static pool. A tip changes after 12 s of total on-screen time, or, once it has been on screen for 1 s in total, while it is hidden (for example, while a tool runs), so each gap between tool calls shows a different tip. A one-shot tip tells the user about a state the system already handled (for example, MCP tools now load on demand): it jumps the queue once, counts only after it is actually rendered, and never comes back. No Loading Tip enters scrollback (ADR 0052).
|
|
265
|
+
_Avoid_: hint (overloaded with Transient Status Message), system message (that is the scrollback form)
|
|
266
|
+
|
|
267
|
+
**System Message**:
|
|
268
|
+
A scrollback entry that comes from the CLI or the SDK, not from the model or a tool, with a severity of info, warning, or error. Warnings that SDK or CLI code logs and the CLI forwards into scrollback are System Messages too.
|
|
269
|
+
_Avoid_: log line, notice (as user-facing words)
|
|
270
|
+
|
|
271
|
+
## Image Chip Language
|
|
272
|
+
|
|
273
|
+
**Image Chip(图片 chip)**:
|
|
274
|
+
输入框中代表一张已粘贴图片的字面量 `[Pasted image #k: label]`。它是图片在草稿里的唯一可见形式;编号 `k` 只在输入框内对齐图片,与模型看到的 `[Image #N]` 无关。
|
|
275
|
+
_Avoid_: image placeholder(与长文本折叠占位符 `[Pasted Content N chars]` 混淆), 图片占位符
|
|
276
|
+
|
|
277
|
+
**Chip Ledger(chip 账本)**:
|
|
278
|
+
当前草稿中 chip 编号到图片数据的映射。提交时只有字面量仍在文本中的账本条目会随消息发出。
|
|
279
|
+
_Avoid_: image map, 图片缓存
|
|
280
|
+
|
|
281
|
+
**Orphan Chip(孤儿 chip)**:
|
|
282
|
+
仍在 Chip Ledger 中、但字面量已不在输入框文本里的图片。提交时它被丢弃。
|
|
283
|
+
_Avoid_: dropped placeholder, 丢失的占位符
|
|
284
|
+
|
|
285
|
+
**Dead Chip Literal(失效 chip 字面量)**:
|
|
286
|
+
格式与 Image Chip 相同、但 Chip Ledger 中没有对应图片的文本,常见于召回的输入历史。它只是文字,不代表图片。
|
|
287
|
+
_Avoid_: 历史图片, stale chip
|
|
288
|
+
|
|
231
289
|
## Terminal Tab Language
|
|
232
290
|
|
|
233
291
|
**Session Title**:
|
|
@@ -325,10 +383,13 @@ _Avoid_: lag log, profiler output (the profiler records phase durations, not a s
|
|
|
325
383
|
|
|
326
384
|
- A **Marketplace** takes its name from its manifest, never from the **Marketplace Source** the user typed; duplicate detection therefore compares resolved sources, not names or spellings.
|
|
327
385
|
- Adding a **Marketplace** is never silent: the user confirms the **Marketplace Source** once before any clone or download starts, whether the source was typed into the panel or prefilled from a slash command argument.
|
|
386
|
+
- Every plugin panel that reports "installed" (a checkmark, a count, a list of installed plugins) means **Effective Installation** for the current project, and uses the same rule the plugin loader uses to decide what to load. Registry membership alone never counts as installed.
|
|
387
|
+
- Manual plugin update and **Plugin Auto Update** act on a plugin key, not on an **Effective Installation**: every record under that key (the user-scope record and every project's local-scope record) moves to the same version together. Display is per project; update is per plugin. There is no per-project version.
|
|
328
388
|
|
|
329
389
|
- **Self-Update** and **Plugin Auto Update** are separate concepts with separate vocabularies: a **Version Check** orders versions, plugin **Update Detection** only compares for equality. Neither triggers the other.
|
|
330
390
|
- A **Side-Install** followed by an **Entrypoint Flip** is one Self-Update strategy; an in-process reinstall of the current installation is another. Which one applies is a property of the platform, not of the user's choice.
|
|
331
391
|
- **Restart-to-Apply** holds for every Self-Update strategy and mirrors the plugin **Update Effectiveness Boundary**: on-disk state changes, the running process does not.
|
|
392
|
+
- **Interpreter Migration** and **Self-Update** both rebuild the installation on the target Python, but only a Self-Update changes the version. A pending Self-Update takes priority: accepting it completes the migration as a side effect, so the launch never offers both before the TUI starts. (The background Version Check can still add an update hint inside the TUI after a migration hint or prompt; the next launch then offers only the update.) Windows has no Interpreter Migration (a Side-Install of the same version is treated as already staged); Windows users reach the target Python through their next Self-Update.
|
|
332
393
|
|
|
333
394
|
- A **Session Title** is a fact of the session, not of the **Session Report**: it exists whether or not a report backend is configured, and the report only mirrors it. **Durable Title Completion** is therefore judged from the session's own metadata.
|
|
334
395
|
- A **Session Title** is generated from the session's earliest **Committed Title Input**, never from the latest one. A resumed session without a title is titled from its original first input, so the title does not change to whatever was typed after resume.
|
|
@@ -349,6 +410,10 @@ _Avoid_: lag log, profiler output (the profiler records phase durations, not a s
|
|
|
349
410
|
- The bottom interaction band shows at most one "working" signal at a time. During a **Stall Status** the loading line carries it and the **Task List Panel** is hidden entirely; when the Stall Status ends, the Task List Panel returns unchanged.
|
|
350
411
|
- Running tools are not a **Stall Status**: the running-tool list and the **Task List Panel** may share the screen.
|
|
351
412
|
|
|
413
|
+
- No submit path destroys an **Image Chip** it cannot use: a **Core Slash Command**, a **Custom Command**, a **Skill Slash Command**, a feedback draft, or a rejected submit leaves the unused chips and their **Chip Ledger** entries in the input box. Only a plain user message carries images to the model.
|
|
414
|
+
- `!` shell mode never accepts an **Image Chip**: an image paste is refused, and a pasted image path stays plain text.
|
|
415
|
+
- An **Orphan Chip** comes only from the user changing the input text (editing, or recalling input history over the draft); the CLI never creates one by itself. A **Dead Chip Literal** never looks like an **Image Chip** in the input box.
|
|
416
|
+
|
|
352
417
|
## Flagged ambiguities
|
|
353
418
|
|
|
354
419
|
- 代码里的 `_menu_panel_active()` 实际含义是“使用共享 `MenuPanel` 外壳”,不含 `/statusline`、marketplace 安装、`/goal edit`,因此与本术语表的 **Menu Panel**(slash 命令打开的暂态操作界面)并不等价。判断 **Status Bar** 是否隐藏另用独立集合,不复用它。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: comate-cli
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.6b2
|
|
4
4
|
Summary: Comate terminal CLI built on comate-agent-sdk
|
|
5
5
|
Project-URL: Homepage, https://github.com/AndyLee1024/agent-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/AndyLee1024/agent-sdk
|
|
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
16
|
Requires-Python: <3.14,>=3.11
|
|
17
17
|
Requires-Dist: charset-normalizer==3.4.7
|
|
18
|
-
Requires-Dist: comate-agent-sdk<0.13,>=0.12.
|
|
18
|
+
Requires-Dist: comate-agent-sdk<0.13,>=0.12.23
|
|
19
19
|
Requires-Dist: comate-rpc<0.2,>=0.1.4
|
|
20
20
|
Requires-Dist: concurrent-log-handler>=0.9.25
|
|
21
21
|
Requires-Dist: curl-cffi==0.13.0
|
|
@@ -841,6 +841,11 @@ def main(argv: list[str] | None = None, *, profile=None) -> None:
|
|
|
841
841
|
sys.stderr.write(f"{exc}\n")
|
|
842
842
|
raise SystemExit(exc.exit_code) from exc
|
|
843
843
|
|
|
844
|
+
# 放在 --version / update / mcp 之后:这几条路径不起 TUI,不付 prompt_toolkit 导入开销。
|
|
845
|
+
from comate_cli.terminal_agent import focus_events
|
|
846
|
+
|
|
847
|
+
focus_events.install()
|
|
848
|
+
|
|
844
849
|
noise_guard = _ShutdownNoiseGuard()
|
|
845
850
|
noise_guard.install()
|
|
846
851
|
|
|
@@ -882,6 +887,8 @@ def main(argv: list[str] | None = None, *, profile=None) -> None:
|
|
|
882
887
|
sys.stderr.write("Error: -p requires a prompt argument or stdin input\n")
|
|
883
888
|
raise SystemExit(1)
|
|
884
889
|
print_message = "\n\n".join(parts)
|
|
890
|
+
# 无人值守监视的默认费用护栏;用户配置仍可在 agent 构建时覆盖。
|
|
891
|
+
os.environ.setdefault("COMATE_MONITOR_MAX_TIMEOUT_MS", "600000")
|
|
885
892
|
|
|
886
893
|
interactive = not rpc_mode and print_message is None
|
|
887
894
|
if interactive:
|
|
@@ -4,7 +4,9 @@ import argparse
|
|
|
4
4
|
import asyncio
|
|
5
5
|
import json
|
|
6
6
|
import logging
|
|
7
|
+
import re
|
|
7
8
|
import sys
|
|
9
|
+
import threading
|
|
8
10
|
from pathlib import Path
|
|
9
11
|
from typing import Any
|
|
10
12
|
|
|
@@ -19,15 +21,21 @@ from comate_agent_sdk.mcp import (
|
|
|
19
21
|
write_mcp_servers_to_path,
|
|
20
22
|
)
|
|
21
23
|
from comate_agent_sdk.mcp.cwd import format_stdio_cwd_resolution, resolve_stdio_cwd
|
|
22
|
-
from comate_agent_sdk.mcp.
|
|
24
|
+
from comate_agent_sdk.mcp.oauth import McpAuthError, authenticate_server, clear_server_auth
|
|
25
|
+
from comate_agent_sdk.mcp.token_store import TokenStore, server_key
|
|
26
|
+
from comate_agent_sdk.mcp.types import REMOTE_TRANSPORTS, McpServerConfig
|
|
23
27
|
from comate_agent_sdk.utils.paths import PathInput
|
|
24
28
|
|
|
29
|
+
from comate_cli.terminal_agent.browser_open import open_browser_best_effort
|
|
25
30
|
from comate_cli.terminal_agent.figures import (
|
|
26
31
|
CHECK_MARK,
|
|
27
32
|
CROSS_MARK,
|
|
28
33
|
ELLIPSIS,
|
|
34
|
+
WARNING_ICON,
|
|
29
35
|
)
|
|
30
36
|
|
|
37
|
+
logger = logging.getLogger(__name__)
|
|
38
|
+
|
|
31
39
|
_WRITABLE_SCOPES: tuple[str, ...] = ("user", "project", "local")
|
|
32
40
|
|
|
33
41
|
|
|
@@ -42,6 +50,16 @@ class _McpArgumentParser(argparse.ArgumentParser):
|
|
|
42
50
|
raise McpCliError(message)
|
|
43
51
|
|
|
44
52
|
|
|
53
|
+
def _add_oauth_arguments(parser: argparse.ArgumentParser) -> None:
|
|
54
|
+
parser.add_argument("--client-id", dest="client_id", help="OAuth client id (http/sse only)")
|
|
55
|
+
parser.add_argument(
|
|
56
|
+
"--client-secret",
|
|
57
|
+
dest="client_secret",
|
|
58
|
+
help="OAuth client secret, written to the config as given; prefer ${ENV_VAR}",
|
|
59
|
+
)
|
|
60
|
+
parser.add_argument("--callback-port", dest="callback_port", help="Fixed OAuth callback port")
|
|
61
|
+
|
|
62
|
+
|
|
45
63
|
def _build_parser(command_name: str = "comate") -> argparse.ArgumentParser:
|
|
46
64
|
parser = _McpArgumentParser(
|
|
47
65
|
prog=f"{command_name} mcp",
|
|
@@ -96,9 +114,7 @@ def _build_parser(command_name: str = "comate") -> argparse.ArgumentParser:
|
|
|
96
114
|
default=False,
|
|
97
115
|
help="Overwrite if server already exists in the same scope",
|
|
98
116
|
)
|
|
99
|
-
add_parser
|
|
100
|
-
add_parser.add_argument("--client-secret", action="store_true", default=False)
|
|
101
|
-
add_parser.add_argument("--callback-port")
|
|
117
|
+
_add_oauth_arguments(add_parser)
|
|
102
118
|
add_parser.add_argument("name")
|
|
103
119
|
add_parser.add_argument("command_or_url", nargs="?")
|
|
104
120
|
|
|
@@ -116,9 +132,7 @@ def _build_parser(command_name: str = "comate") -> argparse.ArgumentParser:
|
|
|
116
132
|
default=False,
|
|
117
133
|
help="Overwrite if server already exists in the same scope",
|
|
118
134
|
)
|
|
119
|
-
add_json_parser
|
|
120
|
-
add_json_parser.add_argument("--client-secret", action="store_true", default=False)
|
|
121
|
-
add_json_parser.add_argument("--callback-port")
|
|
135
|
+
_add_oauth_arguments(add_json_parser)
|
|
122
136
|
add_json_parser.add_argument("name")
|
|
123
137
|
add_json_parser.add_argument("json")
|
|
124
138
|
|
|
@@ -148,6 +162,18 @@ def _build_parser(command_name: str = "comate") -> argparse.ArgumentParser:
|
|
|
148
162
|
help="Delete from scope; omitted means auto-detect",
|
|
149
163
|
)
|
|
150
164
|
|
|
165
|
+
auth_parser = subparsers.add_parser(
|
|
166
|
+
"auth",
|
|
167
|
+
help="Authorize a remote (http/sse) MCP server in the browser",
|
|
168
|
+
)
|
|
169
|
+
auth_parser.add_argument("name")
|
|
170
|
+
auth_parser.add_argument(
|
|
171
|
+
"--clear",
|
|
172
|
+
action="store_true",
|
|
173
|
+
default=False,
|
|
174
|
+
help="Delete the stored credentials of this server",
|
|
175
|
+
)
|
|
176
|
+
|
|
151
177
|
serve_parser = subparsers.add_parser(
|
|
152
178
|
"serve",
|
|
153
179
|
help=f"Start {command_name} as an MCP stdio server (tools: query, reply)",
|
|
@@ -222,6 +248,10 @@ def _normalize_add_unknown_args(unknown: list[str]) -> list[str]:
|
|
|
222
248
|
return list(unknown)
|
|
223
249
|
|
|
224
250
|
|
|
251
|
+
def _looks_like_url(token: str) -> bool:
|
|
252
|
+
return token.strip().lower().startswith(("http://", "https://"))
|
|
253
|
+
|
|
254
|
+
|
|
225
255
|
def _split_add_args(argv: list[str]) -> tuple[list[str], list[str]]:
|
|
226
256
|
if not argv or argv[0] != "add":
|
|
227
257
|
return list(argv), []
|
|
@@ -249,35 +279,21 @@ def _split_add_args(argv: list[str]) -> tuple[list[str], list[str]]:
|
|
|
249
279
|
"-e",
|
|
250
280
|
"--env",
|
|
251
281
|
"--client-id",
|
|
282
|
+
"--client-secret",
|
|
252
283
|
"--callback-port",
|
|
253
284
|
}
|
|
254
|
-
flag_options = {"--force"
|
|
255
|
-
remote_tail_value_options = {"-H", "--header", "--client-id", "--callback-port"}
|
|
256
|
-
remote_tail_flag_options = {"--client-secret"}
|
|
285
|
+
flag_options = {"--force"}
|
|
257
286
|
transport = "stdio"
|
|
258
287
|
|
|
259
288
|
index = 0
|
|
260
289
|
while index < len(before_separator):
|
|
261
290
|
token = before_separator[index]
|
|
262
291
|
if positional_count >= 2:
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
continue
|
|
269
|
-
if transport in {"http", "sse"} and token in remote_tail_flag_options:
|
|
270
|
-
option_args.append(token)
|
|
271
|
-
index += 1
|
|
272
|
-
continue
|
|
273
|
-
if transport in {"http", "sse"} and any(
|
|
274
|
-
token.startswith(f"{option}=")
|
|
275
|
-
for option in remote_tail_value_options
|
|
276
|
-
if option.startswith("--")
|
|
277
|
-
):
|
|
278
|
-
option_args.append(token)
|
|
279
|
-
index += 1
|
|
280
|
-
continue
|
|
292
|
+
# 远程 server 没有子进程参数:URL 后的 token 全部交给 argparse,
|
|
293
|
+
# 选项顺序不影响结果,未知 token 由 argparse 点名报错(ADR 0054)。
|
|
294
|
+
if transport in {"http", "sse"} or _looks_like_url(positional_args[1]):
|
|
295
|
+
remote_tail = before_separator[index:]
|
|
296
|
+
return ["add", *option_args, *positional_args, *remote_tail], after_separator
|
|
281
297
|
extra_args.extend(before_separator[index:])
|
|
282
298
|
break
|
|
283
299
|
|
|
@@ -323,15 +339,7 @@ def _build_add_server_config(
|
|
|
323
339
|
command_or_url = str(args.command_or_url or "").strip()
|
|
324
340
|
remainder = [str(item) for item in list(getattr(args, "extra_args", []) or [])]
|
|
325
341
|
|
|
326
|
-
|
|
327
|
-
getattr(args, "client_id", None)
|
|
328
|
-
or bool(getattr(args, "client_secret", False))
|
|
329
|
-
or getattr(args, "callback_port", None)
|
|
330
|
-
):
|
|
331
|
-
raise McpCliError(
|
|
332
|
-
f"OAuth flags are not supported by {command_name} mcp add yet. "
|
|
333
|
-
"Use headers for token-based HTTP/SSE MCP servers, or add a native oauth object via .mcp.json."
|
|
334
|
-
)
|
|
342
|
+
oauth = _oauth_from_flags(args)
|
|
335
343
|
|
|
336
344
|
if transport in {"http", "sse"}:
|
|
337
345
|
if env_entries:
|
|
@@ -347,8 +355,12 @@ def _build_add_server_config(
|
|
|
347
355
|
}
|
|
348
356
|
if headers:
|
|
349
357
|
cfg["headers"] = headers
|
|
358
|
+
if oauth:
|
|
359
|
+
cfg["oauth"] = oauth
|
|
350
360
|
return cfg # type: ignore[return-value]
|
|
351
361
|
|
|
362
|
+
if oauth:
|
|
363
|
+
raise McpCliError(_OAUTH_FLAGS_REMOTE_ONLY)
|
|
352
364
|
if header_entries:
|
|
353
365
|
raise McpCliError("--header is only supported for http/sse transport")
|
|
354
366
|
stdio_args = list(remainder)
|
|
@@ -356,6 +368,10 @@ def _build_add_server_config(
|
|
|
356
368
|
command_or_url = stdio_args.pop(0)
|
|
357
369
|
if not command_or_url:
|
|
358
370
|
raise McpCliError("stdio transport requires command after <name>")
|
|
371
|
+
if _looks_like_url(command_or_url):
|
|
372
|
+
raise McpCliError(
|
|
373
|
+
f"'{command_or_url}' looks like a remote URL; add --transport http or --transport sse"
|
|
374
|
+
)
|
|
359
375
|
|
|
360
376
|
env = _parse_env_entries(env_entries)
|
|
361
377
|
cfg = {
|
|
@@ -369,12 +385,32 @@ def _build_add_server_config(
|
|
|
369
385
|
return cfg # type: ignore[return-value]
|
|
370
386
|
|
|
371
387
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
388
|
+
_OAUTH_FLAGS_REMOTE_ONLY = "--client-id/--client-secret/--callback-port are only supported for http/sse transport"
|
|
389
|
+
|
|
390
|
+
_ENV_REFERENCE_RE = re.compile(r"^\$\{[A-Za-z_][A-Za-z0-9_]*\}$")
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
def _oauth_from_flags(args: argparse.Namespace) -> dict[str, Any]:
|
|
394
|
+
"""把 OAuth flag 转成配置里的 `oauth` 对象;没有 flag 时返回空 dict。"""
|
|
395
|
+
oauth: dict[str, Any] = {}
|
|
396
|
+
client_id = getattr(args, "client_id", None)
|
|
397
|
+
if client_id is not None:
|
|
398
|
+
oauth["client_id"] = str(client_id)
|
|
399
|
+
client_secret = getattr(args, "client_secret", None)
|
|
400
|
+
if client_secret is not None:
|
|
401
|
+
oauth["client_secret"] = str(client_secret)
|
|
402
|
+
if not _ENV_REFERENCE_RE.match(str(client_secret)):
|
|
403
|
+
sys.stderr.write(
|
|
404
|
+
f"{WARNING_ICON} --client-secret is stored in the config file as plain text; "
|
|
405
|
+
"consider an environment variable reference such as '${MY_CLIENT_SECRET}'.\n"
|
|
406
|
+
)
|
|
407
|
+
callback_port = getattr(args, "callback_port", None)
|
|
408
|
+
if callback_port is not None:
|
|
409
|
+
try:
|
|
410
|
+
oauth["callback_port"] = int(str(callback_port))
|
|
411
|
+
except ValueError:
|
|
412
|
+
raise McpCliError(f"Invalid --callback-port value: {callback_port!r}") from None
|
|
413
|
+
return oauth
|
|
378
414
|
|
|
379
415
|
|
|
380
416
|
def _load_servers_by_scope(*, scope: str, project_root: PathInput | None) -> dict[str, McpServerConfig]:
|
|
@@ -402,6 +438,8 @@ def _render_health_status(
|
|
|
402
438
|
return f"{CHECK_MARK} Connected"
|
|
403
439
|
if normalized == "connecting":
|
|
404
440
|
return f"{ELLIPSIS} Connecting"
|
|
441
|
+
if normalized == "needs-auth":
|
|
442
|
+
return f"{WARNING_ICON} Needs authentication"
|
|
405
443
|
if reason:
|
|
406
444
|
return f"{CROSS_MARK} {reason}"
|
|
407
445
|
return f"{CROSS_MARK} Not connected"
|
|
@@ -488,6 +526,9 @@ def _cmd_add(
|
|
|
488
526
|
raise McpCliError("Server name cannot be empty")
|
|
489
527
|
|
|
490
528
|
config = _build_add_server_config(args, command_name=command_name)
|
|
529
|
+
if "oauth" in config:
|
|
530
|
+
target_path = scope_mcp_path(scope=scope, project_root=project_root) # type: ignore[arg-type]
|
|
531
|
+
config = validate_server_config(alias=name, cfg=dict(config), path=target_path)
|
|
491
532
|
path, existed = _write_server_to_scope(
|
|
492
533
|
name=name,
|
|
493
534
|
config=config,
|
|
@@ -508,12 +549,6 @@ def _cmd_add_json(
|
|
|
508
549
|
project_root: PathInput | None,
|
|
509
550
|
command_name: str = "comate",
|
|
510
551
|
) -> None:
|
|
511
|
-
if _has_oauth_flags(args):
|
|
512
|
-
raise McpCliError(
|
|
513
|
-
f"OAuth flags are not supported by {command_name} mcp add-json yet. "
|
|
514
|
-
"Use headers for token-based HTTP/SSE MCP servers, or add a native oauth object via .mcp.json."
|
|
515
|
-
)
|
|
516
|
-
|
|
517
552
|
scope = str(args.scope)
|
|
518
553
|
name = str(args.name).strip()
|
|
519
554
|
if not name:
|
|
@@ -525,6 +560,12 @@ def _cmd_add_json(
|
|
|
525
560
|
raise McpCliError(f"Invalid JSON: {exc}") from exc
|
|
526
561
|
if not isinstance(raw, dict):
|
|
527
562
|
raise McpCliError("MCP server JSON must be an object")
|
|
563
|
+
oauth = _oauth_from_flags(args)
|
|
564
|
+
if oauth:
|
|
565
|
+
if str(raw.get("type") or "stdio").strip().lower() not in REMOTE_TRANSPORTS:
|
|
566
|
+
raise McpCliError(_OAUTH_FLAGS_REMOTE_ONLY)
|
|
567
|
+
existing = raw.get("oauth")
|
|
568
|
+
raw["oauth"] = {**(existing if isinstance(existing, dict) else {}), **oauth}
|
|
528
569
|
|
|
529
570
|
target_path = scope_mcp_path(scope=scope, project_root=project_root) # type: ignore[arg-type]
|
|
530
571
|
config = validate_server_config(alias=name, cfg=raw, path=target_path)
|
|
@@ -582,14 +623,105 @@ def _cmd_remove(
|
|
|
582
623
|
exit_code=1,
|
|
583
624
|
)
|
|
584
625
|
|
|
585
|
-
servers.pop(name, None)
|
|
626
|
+
removed = servers.pop(name, None)
|
|
586
627
|
path = scope_mcp_path(scope=scope, project_root=project_root) # type: ignore[arg-type]
|
|
587
628
|
write_mcp_servers_to_path(path=path, servers=servers)
|
|
629
|
+
if isinstance(removed, dict) and str(removed.get("type", "stdio")).strip().lower() in REMOTE_TRANSPORTS:
|
|
630
|
+
# 删除 server 不应在本机留下它的凭据;delete 同时去掉"已清除"标记
|
|
631
|
+
TokenStore().delete(server_key(name, dict(removed)))
|
|
588
632
|
sys.stdout.write(
|
|
589
633
|
f"Removed MCP server '{name}' from {scope} scope: {path.expanduser()}\n"
|
|
590
634
|
)
|
|
591
635
|
|
|
592
636
|
|
|
637
|
+
def _resolve_remote_server(name: str, *, project_root: PathInput | None) -> dict[str, Any]:
|
|
638
|
+
resolved = _read_effective_server_with_source(name=name, project_root=project_root)
|
|
639
|
+
if resolved is None:
|
|
640
|
+
raise McpCliError(f"MCP server '{name}' not found.", exit_code=1)
|
|
641
|
+
cfg = dict(resolved[0])
|
|
642
|
+
server_type = str(cfg.get("type", "stdio")).strip().lower()
|
|
643
|
+
if server_type not in REMOTE_TRANSPORTS:
|
|
644
|
+
raise McpCliError(
|
|
645
|
+
f"MCP server '{name}' uses {server_type} transport; only http/sse servers support authorization.",
|
|
646
|
+
exit_code=1,
|
|
647
|
+
)
|
|
648
|
+
return cfg
|
|
649
|
+
|
|
650
|
+
|
|
651
|
+
def _read_pasted_callback(loop: asyncio.AbstractEventLoop, pasted: asyncio.Future[str]) -> None:
|
|
652
|
+
"""后台读 stdin 的第一行非空输入作为回调 URL。
|
|
653
|
+
|
|
654
|
+
用 daemon 线程而不是 `asyncio.to_thread`:浏览器回调先到时,阻塞在 readline 的线程无法取消,
|
|
655
|
+
`asyncio.run` 退出时会等默认线程池里的线程,命令就卡住不退出。
|
|
656
|
+
"""
|
|
657
|
+
|
|
658
|
+
def _resolve(line: str) -> None:
|
|
659
|
+
if not pasted.done():
|
|
660
|
+
pasted.set_result(line)
|
|
661
|
+
|
|
662
|
+
def _read() -> None:
|
|
663
|
+
try:
|
|
664
|
+
for line in sys.stdin:
|
|
665
|
+
if line.strip():
|
|
666
|
+
loop.call_soon_threadsafe(_resolve, line.strip())
|
|
667
|
+
return
|
|
668
|
+
except (OSError, ValueError, RuntimeError):
|
|
669
|
+
# stdin 关闭或 loop 已结束:只剩浏览器回调这一条路
|
|
670
|
+
return
|
|
671
|
+
|
|
672
|
+
threading.Thread(target=_read, name="mcp-auth-stdin", daemon=True).start()
|
|
673
|
+
|
|
674
|
+
|
|
675
|
+
def _show_authorization_url(name: str, url: str) -> None:
|
|
676
|
+
sys.stdout.write(
|
|
677
|
+
f"Authorize '{name}' in your browser:\n\n {url}\n\n"
|
|
678
|
+
"If the browser cannot reach this machine (e.g. over SSH), paste the full callback URL "
|
|
679
|
+
"from the browser address bar here and press Enter.\n"
|
|
680
|
+
)
|
|
681
|
+
sys.stdout.flush()
|
|
682
|
+
# 尽力而为,失败时用户照样可以手动打开上面的 URL。没有图形界面(SSH)不打开,避免 w3m / lynx
|
|
683
|
+
# 抢走终端、用户没法粘贴回调 URL;打开放在 daemon 线程里,不阻塞等回调的 event loop。
|
|
684
|
+
open_browser_best_effort(url)
|
|
685
|
+
|
|
686
|
+
|
|
687
|
+
async def _authenticate(name: str, cfg: dict[str, Any], token_store: TokenStore) -> None:
|
|
688
|
+
loop = asyncio.get_running_loop()
|
|
689
|
+
pasted: asyncio.Future[str] = loop.create_future()
|
|
690
|
+
_read_pasted_callback(loop, pasted)
|
|
691
|
+
await authenticate_server(
|
|
692
|
+
name,
|
|
693
|
+
cfg,
|
|
694
|
+
token_store=token_store,
|
|
695
|
+
on_authorization_url=lambda url: _show_authorization_url(name, url),
|
|
696
|
+
manual_callback=pasted,
|
|
697
|
+
)
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
def _cmd_auth(args: argparse.Namespace, *, project_root: PathInput | None) -> None:
|
|
701
|
+
name = str(args.name).strip()
|
|
702
|
+
if not name:
|
|
703
|
+
raise McpCliError("Server name cannot be empty")
|
|
704
|
+
cfg = _resolve_remote_server(name, project_root=project_root)
|
|
705
|
+
token_store = TokenStore()
|
|
706
|
+
|
|
707
|
+
if args.clear:
|
|
708
|
+
clear_server_auth(name, cfg, token_store=token_store)
|
|
709
|
+
sys.stdout.write(f"Cleared authorization for '{name}'.\n")
|
|
710
|
+
return
|
|
711
|
+
|
|
712
|
+
try:
|
|
713
|
+
asyncio.run(_authenticate(name, cfg, token_store))
|
|
714
|
+
except KeyboardInterrupt:
|
|
715
|
+
raise McpCliError("Authorization cancelled.", exit_code=130) from None
|
|
716
|
+
except McpAuthError as exc:
|
|
717
|
+
raise McpCliError(str(exc), exit_code=1) from exc
|
|
718
|
+
sys.stdout.write(
|
|
719
|
+
f"Authenticated '{name}'.\n"
|
|
720
|
+
"A running comate session does not reconnect by itself: "
|
|
721
|
+
"press Reconnect in /mcp, or start a new session.\n"
|
|
722
|
+
)
|
|
723
|
+
|
|
724
|
+
|
|
593
725
|
def _cmd_serve(args: Any, *, project_root: PathInput | None = None) -> None:
|
|
594
726
|
# stdout 是 MCP stdio 协议通道:日志强制落 stderr
|
|
595
727
|
logging.basicConfig(level=logging.INFO, stream=sys.stderr, force=True)
|
|
@@ -696,6 +828,14 @@ def _cmd_get(
|
|
|
696
828
|
lines.append(" Headers:")
|
|
697
829
|
for key in sorted(headers.keys()):
|
|
698
830
|
lines.append(f" {key}: {headers[key]}")
|
|
831
|
+
oauth = cfg.get("oauth") or {} # type: ignore[attr-defined]
|
|
832
|
+
oauth_parts: list[str] = []
|
|
833
|
+
if isinstance(oauth, dict) and oauth.get("client_id"):
|
|
834
|
+
oauth_parts.append("client_id configured")
|
|
835
|
+
if isinstance(oauth, dict) and oauth.get("callback_port") is not None:
|
|
836
|
+
oauth_parts.append(f"callback_port {oauth['callback_port']}")
|
|
837
|
+
if oauth_parts:
|
|
838
|
+
lines.append(f" OAuth: {', '.join(oauth_parts)}")
|
|
699
839
|
else:
|
|
700
840
|
lines.append(f" Command: {str(cfg.get('command', '')).strip()}") # type: ignore[attr-defined]
|
|
701
841
|
raw_args = cfg.get("args") or [] # type: ignore[attr-defined]
|
|
@@ -746,6 +886,7 @@ def run_mcp_command(
|
|
|
746
886
|
"list": _cmd_list,
|
|
747
887
|
"get": _cmd_get,
|
|
748
888
|
"remove": _cmd_remove,
|
|
889
|
+
"auth": _cmd_auth,
|
|
749
890
|
"serve": _cmd_serve,
|
|
750
891
|
}
|
|
751
892
|
handler = handlers.get(command)
|