mirror of
https://git.openapi.site/https://github.com/desirecore/market.git
synced 2026-07-23 06:03:45 +08:00
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:
@@ -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'`)
|
||||
|
||||
Reference in New Issue
Block a user