feat(skills): 智能体 CRUD 四技能改经 ManageAgent 内置工具(实例鉴权适配) (#52)

## 摘要 / Summary

### 中文

主仓库 desirecore#1225 新增 `ManageAgent` 内置工具后,智能体 CRUD 四技能从"调本机 HTTP
API/curl"改写为调用该工具(实例鉴权上线后 Agent 直接访问本机 API 会 401):

- **create-agent 2.5.0**:`POST /api/agents` →
`ManageAgent(action='create', ...)`;补充保留标识(core/desirecore)拒创、config 仅允许
llm 白名单的错误处理
- **delete-agent 2.5.0**:`DELETE /api/agents/:id` →
`action='delete'`(工具层强制用户确认);错误处理改为工具拒绝语义(核心智能体/自删/活跃状态);补团队级联说明
- **discover-agent 2.6.0**:`GET /api/agents(/:id)` →
`action='list'/'get'`
- **update-agent
3.1.0**:结构化字段(name/description/llm/persona/principles)改经
`action='update'`(白名单+schema 校验+字段级合并语义),自由格式文件仍 Read/Write

四技能声明 `market.required_client_version:
10.0.90`,老客户端在市场端被门控禁装。中英双语正文同步改写,i18n source_hash 已重算(validate-i18n.py
通过);manifest 1.2.10。

### English

After desirecore#1225 shipped the `ManageAgent` builtin tool, the four
agent-CRUD skills are rewritten from local-HTTP-API/curl instructions to
tool calls (direct local API access now returns 401 under instance
auth). Each skill declares `market.required_client_version: 10.0.90` so
older clients are gated from installing. Both locales are rewritten in
sync and i18n source hashes recomputed (validate-i18n.py passes);
manifest bumped to 1.2.10.

主仓库回填:合并后将在 desirecore 主仓库执行 `npm run sync-market` 生成新的
defaults/market.zip 并单独提 PR。
This commit is contained in:
2026-07-18 23:05:18 +08:00
committed by GitHub
parent ea07d05550
commit 1c00b8e6c8
13 changed files with 524 additions and 408 deletions

View File

@@ -10,7 +10,7 @@
### 能力描述
delete-agent 是一个**元技能Meta-Skill**,赋予 DesireCore 安全删除其他智能体的能力。它执行完整的前置检查、状态验证,并清理所有关联数据。
delete-agent 是一个**元技能Meta-Skill**,赋予 DesireCore 安全删除其他智能体的能力。它通过进程内内置工具 **ManageAgent** 执行完整的前置检查、状态验证,并清理所有关联数据。
### 使用场景
@@ -21,8 +21,8 @@ delete-agent 是一个**元技能Meta-Skill**,赋予 DesireCore 安全
### 核心价值
- **安全性**多重检查确保不会误删活跃智能体
- **完整性**:清理文件系统、内存状态、消息订阅等所有关联数据
- **安全性**工具层多重拒绝规则确保不会误删核心智能体、调用方自身或活跃智能体
- **完整性**:清理文件系统、内存状态、消息订阅等所有关联数据,并处理团队级联
- **可恢复性**:默认保留会话历史,可选择是否删除
## L2详细规范
@@ -37,8 +37,8 @@ delete-agent 是一个**元技能Meta-Skill**,赋予 DesireCore 安全
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 返回结果 │ ←── │ 执行删除 │ ←── │ 最终确认
│ 与回执 │ │ API 调用 │ │ │
│ 返回结果 │ ←── │ 执行删除 │ ←── │ 告知会弹确认
│ 与回执 │ │ ManageAgent │ │ │
└──────────────┘ └──────────────┘ └──────────────┘
```
@@ -48,9 +48,10 @@ delete-agent 是一个**元技能Meta-Skill**,赋予 DesireCore 安全
**操作**
- 调用 `GET /api/agents` 获取所有智能体列表
- 调用 `ManageAgent(action='list')` 获取所有智能体列表
- 筛选出状态为 `offline``error` 的智能体(可安全删除)
- 标注出 `online`/`busy`/`recovery` 状态的智能体(需先停止)
- 标注出 `online`/`busy`/`recovery` 状态的智能体(需先停止,否则会被工具拒绝
- 如需查看某个智能体的详细信息,调用 `ManageAgent(action='get', id='<agent-id>')`
**输出示例**
@@ -95,57 +96,35 @@ delete-agent 是一个**元技能Meta-Skill**,赋予 DesireCore 安全
**参数映射**
- 用户选择"是" → `deleteRuns=true`
- 用户选择"否" → `deleteRuns=false`(默认)
- 用户选择"否" → `deleteRuns=false`(默认,可省略
### 阶段 4最终确认
### 阶段 4告知工具级确认
**确认摘要**
`ManageAgent` 的 delete 动作在工具层**始终触发用户确认弹窗**,无需在技能层再重复一遍二次确认话术。但在调用前应先告知用户
```
请确认删除操作:
- 目标智能体:法律顾问助手 (legal-assistant)
- 删除范围:智能体 + 会话历史(如用户选择)
- 风险等级:高(不可恢复)
确认执行删除?(是/否)
即将删除智能体 "法律顾问助手" (legal-assistant),删除范围为智能体 + 会话历史(如用户选择)。
系统会弹出确认窗口,请在弹窗中确认执行。
```
### 阶段 5执行删除 API 调用
### 阶段 5执行删除ManageAgent 工具)
**API 端点**`DELETE /api/agents/{agentId}`
**工具调用**
**查询参数**
- `deleteRuns`: `'true'``'false'`
**请求示例**
```bash
curl -X DELETE "{agentServiceUrl}/api/agents/legal-assistant?deleteRuns=true"
```
ManageAgent(action='delete', id='legal-assistant', deleteRuns=true)
```
> `{agentServiceUrl}` 取自 system prompt「本机 API」小节中的 Agent Service 地址。
**参数**
- `id`:目标智能体 ID必填
- `deleteRuns``true` 一并删除全部会话历史;`false`(默认)保留历史,可省略
工具会在执行前弹出用户确认;确认后完成删除,包含团队级联处理:目标是组长的团队自动解散,是成员的自动移除。
### 阶段 6返回操作结果
**成功响应处理**
```json
{
"deleted": true,
"cleanedPaths": [
"/Users/xxx/.desirecore/agents/legal-assistant",
"/Users/xxx/.desirecore/users/xxx/agents/legal-assistant"
],
"deletedRunsCount": 5,
"memoryCleaned": {
"scheduler": true,
"queue": 0,
"messaging": 3,
"mcp": true
}
}
```
**成功回执处理**工具返回删除结果,包含已清理路径、删除的会话数量、内存状态清理详情等字段。据此生成报告。
**结果报告模板**
@@ -158,37 +137,32 @@ curl -X DELETE "{agentServiceUrl}/api/agents/legal-assistant?deleteRuns=true"
- 消息订阅:已取消 3 个订阅
- MCP 连接:已关闭
- 会话历史:已删除 5 条记录
- 团队级联:目标所在团队已解散/已从团队移除(如涉及)
```
## 状态验证与错误处理
### 删除前状态检查
在阶段 1 列出智能体时,通过 `GET /api/agents` 筛选状态
在阶段 1 列出智能体时,通过 `ManageAgent(action='list')` 返回的状态筛选
| 状态 | 可否删除 | 阶段 1 展示方式 |
| ------------------------------ | ----------- | ------------------------------ |
| `offline` / `error` | ✅ 可删除 | 列入"可删除"列表 |
| `online` / `busy` / `recovery` | ❌ 需先停止 | 标注"需先停止",不进入后续流程 |
**停止活跃智能体的方式**:通过 Socket.IO 发送 `agent:shutdown` 事件:
> 活跃状态online/busy/recovery的智能体会被 `ManageAgent` 的 delete 动作直接拒绝。应提示用户在 UI 中手动停止该智能体,或等待其完成当前任务后再删除。
```yaml
事件: agent:shutdown
数据: { 'agentId': '<agent_id>' }
效果: 中止所有活跃会话 → 停止调度任务 → 状态转为 offline
```
### 工具返回的错误语义
> Agent 无法直接发送 Socket.IO 事件。如果目标智能体处于活跃状态,应提示用户在 UI 中手动停止,或等待其完成当前任务后再删除。
`ManageAgent(action='delete', ...)` 在以下情形会返回明确错误,应据此向用户解释并给出下一步建议:
### API 错误码
| 错误码 | 场景 | 处理方式 |
| ------ | ---------------------------------------------------------------------------- | -------------------------------- |
| 400 | Agent ID 格式无效 | 提示用户检查智能体名称 |
| 404 | 智能体不存在 | 告知用户智能体已被删除或 ID 错误 |
| 409 | 智能体处于活跃状态API 返回 `Cannot delete agent "xxx": currently online` | 提示用户先在 UI 中停止智能体 |
| 500 | 服务器内部错误 | 提示用户稍后再试 |
| 拒绝场景 | 触发条件 | 处理方式 |
| ---------------- | -------------------------------------------------------------- | -------------------------------------- |
| 核心智能体拒绝 | 目标为核心智能体desirecore/core/绑定 UUID | 告知用户核心智能体不可删除 |
| 自删拒绝 | 目标为调用方自身 | 告知用户智能体不能删除自己 |
| 活跃状态拒绝 | 目标处于 `online`/`busy`/`recovery` 状态 | 提示用户先在 UI 中停止该智能体 |
| 不存在 | 目标 ID 对应的智能体不存在 | 告知用户智能体已被删除或 ID 有误 |
## 删除范围说明
@@ -196,15 +170,14 @@ curl -X DELETE "{agentServiceUrl}/api/agents/legal-assistant?deleteRuns=true"
| ------------ | -------------------------------------------------------------------------------------------------------------------------- | ----------------- |
| **始终删除** | AgentFS 目录配置、人格、规则、技能、工具、记忆、用户偏好数据、内存状态调度器、队列、消息订阅、MCP 连接)、注册表条目 | 无条件 |
| **可选删除** | 会话历史、话题索引 | `deleteRuns=true` |
| **团队级联** | 目标是组长 → 解散其团队;目标是成员 → 从团队移除 | 自动 |
| **保留不删** | 其他智能体数据、用户配置、全局设置、市场缓存 | — |
## 权限要求
- 建议优先通过 `Bash` 工具调用 curl 访问 Agent Service HTTP API 完成操作
- API 基础地址已注入到 system prompt 的「本机 API」小节直接引用即可
- 删除操作需要用户显式确认(高风险操作)
- 通过进程内内置工具 `ManageAgent` 完成智能体的列出、查询与删除
- delete 动作为高风险操作,工具层会强制弹出用户确认
## 依赖
- Agent Service HTTP API`DELETE /api/agents/{agentId}`
- System prompt 中的本机 API 地址声明
- 进程内内置工具 `ManageAgent``action='list' | 'get' | 'delete'`