<!-- locale: zh-CN -->

# delete-agent 技能

## L0：一句话摘要

安全删除指定的智能体及其关联数据，包括文件系统、内存状态和可选的会话历史。

## L1：概述与使用场景

### 能力描述

delete-agent 是一个**元技能（Meta-Skill）**，赋予 DesireCore 安全删除其他智能体的能力。它通过进程内内置工具 **ManageAgent** 执行完整的前置检查、状态验证，并清理所有关联数据。

### 使用场景

- 用户想要清理不再使用的智能体
- 删除测试或实验性质的临时智能体
- 释放存储空间，删除旧智能体及其历史记录
- 用户明确要求"删除"、"移除"某个智能体

### 核心价值

- **安全性**：工具层多重拒绝规则确保不会误删核心智能体、调用方自身或活跃智能体
- **完整性**：清理文件系统、内存状态、消息订阅等所有关联数据，并处理团队级联
- **可恢复性**：默认保留会话历史，可选择是否删除

## L2：详细规范

### 执行流程

```
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│   列出可选    │ ──→ │   确认意图    │ ──→ │   询问选项    │
│   智能体     │     │   与目标      │     │  (删除历史?)  │
└──────────────┘     └──────────────┘     └──────────────┘
                                                  │
                                                  ↓
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│   返回结果    │ ←── │   执行删除    │ ←── │  告知会弹确认  │
│   与回执      │     │  ManageAgent │     │              │
└──────────────┘     └──────────────┘     └──────────────┘
```

### 阶段 1：列出可删除的智能体

**触发条件**：用户表达删除意图但未指定具体智能体

**操作**：

- 调用 `ManageAgent(action='list')` 获取所有智能体列表
- 筛选出状态为 `offline` 或 `error` 的智能体（可安全删除）
- 标注出 `online`/`busy`/`recovery` 状态的智能体（需先停止，否则会被工具拒绝）
- 如需查看某个智能体的详细信息，调用 `ManageAgent(action='get', id='<agent-id>')`

**输出示例**：

```
可删除的智能体：
1. 法律顾问助手 (legal-assistant) - 状态: offline
2. 测试机器人 (test-bot) - 状态: offline

当前活跃的智能体（需先停止才能删除）：
- 数据分析师 (data-analyst) - 状态: online
```

### 阶段 2：确认用户意图与目标

**确认要点**：

- 用户指定的智能体名称/ID
- 明确告知删除操作不可恢复
- 展示智能体基本信息供用户确认

**对话示例**：

```
您要删除智能体 "法律顾问助手" (legal-assistant)。
⚠️ 警告：此操作不可恢复，该智能体的所有配置、技能、工具将被永久删除。

确认删除？（是/否）
```

### 阶段 3：询问删除选项

**询问内容**：

```
是否同时删除该智能体的所有会话历史？
- 是：删除智能体及其所有对话记录
- 否：保留会话历史，仅删除智能体本身

默认选项：否（保留历史）
```

**参数映射**：

- 用户选择"是" → `deleteRuns=true`
- 用户选择"否" → `deleteRuns=false`（默认，可省略）

### 阶段 4：告知工具级确认

`ManageAgent` 的 delete 动作在工具层**始终触发用户确认弹窗**，无需在技能层再重复一遍二次确认话术。但在调用前应先告知用户：

```
即将删除智能体 "法律顾问助手" (legal-assistant)，删除范围为智能体 + 会话历史（如用户选择）。
系统会弹出确认窗口，请在弹窗中确认执行。
```

### 阶段 5：执行删除（ManageAgent 工具）

**工具调用**：

```
ManageAgent(action='delete', id='legal-assistant', deleteRuns=true)
```

**参数**：

- `id`：目标智能体 ID（必填）
- `deleteRuns`：`true` 一并删除全部会话历史；`false`（默认）保留历史，可省略

工具会在执行前弹出用户确认；确认后完成删除，包含团队级联处理：目标是组长的团队自动解散，是成员的自动移除。

### 阶段 6：返回操作结果

**成功回执处理**：工具返回删除结果，包含已清理路径、删除的会话数量、内存状态清理详情等字段。据此生成报告。

**结果报告模板**：

```
✅ 智能体 "法律顾问助手" 已成功删除

清理详情：
- 文件系统：已删除 2 个目录
- 调度器：已停止所有定时任务
- 消息订阅：已取消 3 个订阅
- MCP 连接：已关闭
- 会话历史：已删除 5 条记录
- 团队级联：目标所在团队已解散/已从团队移除（如涉及）
```

## 状态验证与错误处理

### 删除前状态检查

在阶段 1 列出智能体时，通过 `ManageAgent(action='list')` 返回的状态筛选：

| 状态                           | 可否删除    | 阶段 1 展示方式                |
| ------------------------------ | ----------- | ------------------------------ |
| `offline` / `error`            | ✅ 可删除   | 列入"可删除"列表               |
| `online` / `busy` / `recovery` | ❌ 需先停止 | 标注"需先停止"，不进入后续流程 |

> 活跃状态（online/busy/recovery）的智能体会被 `ManageAgent` 的 delete 动作直接拒绝。应提示用户在 UI 中手动停止该智能体，或等待其完成当前任务后再删除。

### 工具返回的错误语义

`ManageAgent(action='delete', ...)` 在以下情形会返回明确错误，应据此向用户解释并给出下一步建议：

| 拒绝场景         | 触发条件                                                       | 处理方式                               |
| ---------------- | -------------------------------------------------------------- | -------------------------------------- |
| 核心智能体拒绝   | 目标为核心智能体（desirecore/core/绑定 UUID）                  | 告知用户核心智能体不可删除             |
| 自删拒绝         | 目标为调用方自身                                               | 告知用户智能体不能删除自己             |
| 活跃状态拒绝     | 目标处于 `online`/`busy`/`recovery` 状态                       | 提示用户先在 UI 中停止该智能体         |
| 不存在           | 目标 ID 对应的智能体不存在                                     | 告知用户智能体已被删除或 ID 有误       |

## 删除范围说明

| 类别         | 删除内容                                                                                                                   | 条件              |
| ------------ | -------------------------------------------------------------------------------------------------------------------------- | ----------------- |
| **始终删除** | AgentFS 目录（配置、人格、规则、技能、工具、记忆）、用户偏好数据、内存状态（调度器、队列、消息订阅、MCP 连接）、注册表条目 | 无条件            |
| **可选删除** | 会话历史、话题索引                                                                                                         | `deleteRuns=true` |
| **团队级联** | 目标是组长 → 解散其团队；目标是成员 → 从团队移除                                                                           | 自动              |
| **保留不删** | 其他智能体数据、用户配置、全局设置、市场缓存                                                                               | —                 |

## 权限要求

- 通过进程内内置工具 `ManageAgent` 完成智能体的列出、查询与删除
- delete 动作为高风险操作，工具层会强制弹出用户确认

## 依赖

- 进程内内置工具 `ManageAgent`（`action='list' | 'get' | 'delete'`）
