Remove Claude Code agent configs. */
| 9682 | |
| 9683 | /* Remove Claude Code agent configs. */ |
| 9684 | static void uninstall_claude_code(const char *home, bool dry_run) { |
| 9685 | char installed_binary[CLI_BUF_1K]; |
| 9686 | cbm_agent_installed_binary_path(home, installed_binary, sizeof(installed_binary)); |
| 9687 | char config_dir[CLI_BUF_1K]; |
| 9688 | cbm_claude_config_dir(home, config_dir, sizeof(config_dir)); |
| 9689 | char user_root[CLI_BUF_1K]; |
| 9690 | cbm_claude_user_root(home, user_root, sizeof(user_root)); |
| 9691 | |
| 9692 | char skills_dir[CLI_BUF_1K]; |
| 9693 | snprintf(skills_dir, sizeof(skills_dir), "%s/skills", config_dir); |
| 9694 | int removed = cbm_remove_skills(skills_dir, dry_run); |
| 9695 | printf("Claude Code: removed %d skill(s)\n", removed); |
| 9696 | char agent_path[CLI_BUF_1K]; |
| 9697 | snprintf(agent_path, sizeof(agent_path), "%s/agents/codebase-memory.md", config_dir); |
| 9698 | uninstall_tiered_agent_profiles( |
| 9699 | (cbm_tiered_profile_set_t){ |
| 9700 | .label = "Claude Code", |
| 9701 | .verify_path = agent_path, |
| 9702 | .binary_path = installed_binary, |
| 9703 | .legacy_verify_content = legacy_claude_verify_agent_content, |
| 9704 | .dialect = CBM_GRAPH_DIALECT_CLAUDE, |
| 9705 | }, |
| 9706 | dry_run); |
| 9707 | |
| 9708 | char mcp_path[CLI_BUF_1K]; |
| 9709 | snprintf(mcp_path, sizeof(mcp_path), "%s/.mcp.json", config_dir); |
| 9710 | if (!dry_run && cbm_remove_editor_mcp_owned(installed_binary, mcp_path) != CLI_OK) { |
| 9711 | record_agent_config_error(true, "Claude Code", "legacy_mcp_uninstall", mcp_path); |
| 9712 | } |
| 9713 | printf(" removed MCP config entry\n"); |
| 9714 | |
| 9715 | char mcp_path2[CLI_BUF_1K]; |
| 9716 | snprintf(mcp_path2, sizeof(mcp_path2), "%s/.claude.json", user_root); |
| 9717 | if (!dry_run && cbm_remove_editor_mcp_owned(installed_binary, mcp_path2) != CLI_OK) { |
| 9718 | record_agent_config_error(true, "Claude Code", "mcp_uninstall", mcp_path2); |
| 9719 | } |
| 9720 | |
| 9721 | char settings_path[CLI_BUF_1K]; |
| 9722 | snprintf(settings_path, sizeof(settings_path), "%s/settings.json", config_dir); |
| 9723 | if (!dry_run) { |
| 9724 | if (cbm_remove_claude_hooks(settings_path) != CLI_OK) { |
| 9725 | record_agent_config_error(true, "Claude Code", "pretool_hook_uninstall", settings_path); |
| 9726 | } |
| 9727 | if (cbm_remove_session_hooks(settings_path) != CLI_OK) { |
| 9728 | record_agent_config_error(true, "Claude Code", "session_hook_uninstall", settings_path); |
| 9729 | } |
| 9730 | if (cbm_remove_claude_subagent_hooks(settings_path) != CLI_OK) { |
| 9731 | record_agent_config_error(true, "Claude Code", "subagent_hook_uninstall", |
| 9732 | settings_path); |
| 9733 | } |
| 9734 | char current_gate[CLI_BUF_8K]; |
| 9735 | char current_session[CLI_BUF_8K]; |
| 9736 | char current_subagent[CLI_BUF_8K]; |
| 9737 | char released_gate[CLI_BUF_8K]; |
| 9738 | const char *const gate_legacy[] = {released_gate}; |
| 9739 | const char *const session_legacy[] = {cmm_released_session_script}; |
| 9740 | const char *const subagent_legacy[] = {cmm_released_subagent_script}; |
| 9741 | size_t gate_legacy_count = cbm_build_released_gate_script(installed_binary, released_gate, |
no test coverage detected