# 智能化部署 Agent Demo 接口定义说明

## 1. 文档说明

### 1.1 文档目的

本文档用于定义智能化部署 Agent MVP 阶段的 demo 接口,作为前后端开发、联调和本地 Agent 接入的直接输入。

本文档覆盖以下接口范围:

1. Agent 对外任务接口。
2. 云端与本地 Agent 的交互接口。
3. 软件 A demo 接口。
4. 身份 demo 接口。
5. 审批 demo 接口。

### 1.2 设计目标

1. 先打通完整闭环。
2. 接口语义尽量稳定,便于后续替换为真实系统。
3. 上层编排尽量不感知 demo 与真实系统差异。
4. 所有关键动作可追溯、可审计。

### 1.3 非目标

本文档不覆盖:

1. 前端页面字段细节。
2. 数据库表结构 DDL。
3. 真实软件 A 适配细节。
4. 所有部署场景的扩展字段。

---

## 2. 总体约定

## 2.1 协议约定

1. 协议采用 `HTTPS + JSON`。
2. 字符编码采用 `UTF-8`。
3. 时间字段统一采用 `yyyy-MM-dd HH:mm:ss.SSS` 字符串格式,例如 `2026-04-07 18:00:00.123`。
4. 未特殊说明时,所有时间字段默认时区为 `Asia/Shanghai`。
5. 所有写接口建议支持 `request_id` 做幂等控制。

## 2.2 字段命名规范

1. 所有 JSON 字段统一采用 `snake_case`。
2. 主键、关联键、设备键、任务键统一使用 `*_id` 后缀,例如 `task_id`、`approval_id`、`edge_id`。
3. 状态字段统一使用 `*_status` 后缀,例如 `task_status`、`approval_status`。
4. 类型字段统一使用 `*_type` 后缀,例如 `action_type`、`os_type`。
5. 时间点字段统一使用 `*_at` 后缀,例如 `created_at`、`finished_at`、`expire_at`;通用响应时间字段保留 `timestamp`。
6. 毫秒级耗时统一使用 `*_ms` 后缀,例如 `duration_ms`、`latency_ms`、`timeout_ms`。
7. 数量统计统一使用 `*_count` 后缀,例如 `log_error_count`、`total_count`。
8. 集合字段优先使用复数名词,例如 `roles`、`permissions`、`target_nodes`。
9. 布尔字段按语义命名,通用执行结果使用 `success`,权限判断使用 `allowed`,验证结果使用 `*_ok`。
10. 令牌有效期等以秒为单位的持续时间字段统一使用 `*_seconds` 后缀,例如 `expires_in_seconds`。

## 2.3 通用请求头

面向用户调用:

```http
Authorization: Bearer <access_token>
Content-Type: application/json
X-Request-Id: 2f6af6ad-8d98-4f6a-90d4-1ec6a661f701
X-Tenant-Id: tenant-demo
```

面向本地 Agent 调用:

```http
Authorization: Bearer <edge_token>
Content-Type: application/json
X-Request-Id: 4a2e9309-5670-43cf-a88e-7ab5a36190e1
X-Edge-Id: edge-shanghai-001
X-Signature: <signature>
```

## 2.4 通用响应格式

所有接口统一返回如下格式:

```json
{
  "request_id": "2f6af6ad-8d98-4f6a-90d4-1ec6a661f701",
  "success": true,
  "code": "OK",
  "message": "success",
  "data": {},
  "timestamp": "2026-04-08 14:30:00.123"
}
```

字段说明:

1. `request_id`:请求唯一标识。
2. `success`:是否成功。
3. `code`:业务错误码。
4. `message`:可读描述。
5. `data`:业务数据。
6. `timestamp`:响应时间。

## 2.5 通用错误码

建议保留以下错误码:

1. `OK`
2. `INVALID_PARAM`
3. `UNAUTHORIZED`
4. `FORBIDDEN`
5. `NOT_FOUND`
6. `CONFLICT`
7. `APPROVAL_REQUIRED`
8. `CONFIRM_REQUIRED`
9. `TOOL_CALL_FAILED`
10. `EDGE_UNAVAILABLE`
11. `SOFTWARE_A_FAILED`
12. `TIMEOUT`
13. `INTERNAL_ERROR`

## 2.6 关键枚举定义

### 2.5.1 风险等级

```json
["LOW", "MEDIUM", "HIGH"]
```

### 2.5.2 任务状态

```json
[
  "CREATED",
  "PENDING_CONFIRM",
  "PENDING_APPROVAL",
  "RUNNING",
  "VERIFYING",
  "SUCCEEDED",
  "FAILED",
  "PARTIAL_SUCCEEDED",
  "CANCELLED"
]
```

### 2.5.3 审批状态

```json
["NOT_REQUIRED", "PENDING", "APPROVED", "REJECTED", "EXPIRED"]
```

### 2.5.4 动作类型

```json
[
  "DEPLOY",
  "PUSH_CONFIG",
  "START_SERVICE",
  "STOP_SERVICE",
  "RESTART_SERVICE",
  "ROLLBACK",
  "QUERY_LOG",
  "HEALTH_CHECK",
  "CALL_THIRD_PARTY_API"
]
```

---

## 3. Agent 对外接口

## 3.1 创建任务

`POST /api/agent/tasks`

说明:

1. 接收用户自然语言输入。
2. 返回任务解析结果。
3. 若缺参或需要确认,不直接执行。

请求示例:

```json
{
  "input_text": "把 order-service 1.2.3 部署到测试环境",
  "channel": "WEB",
  "session_id": "sess-001",
  "tenant_id": "tenant-demo",
  "context": {
    "preferred_env": "test"
  }
}
```

响应示例:

```json
{
  "request_id": "req-001",
  "success": true,
  "code": "OK",
  "message": "success",
  "data": {
    "task_id": "task-20260408-001",
    "parsed_intent": {
      "action_type": "DEPLOY",
      "app_code": "order-service",
      "env": "test",
      "version": "1.2.3"
    },
    "missing_slots": [],
    "risk_level": "MEDIUM",
    "task_status": "PENDING_CONFIRM",
    "next_action": "CONFIRM_TASK"
  },
  "timestamp": "2026-04-08 14:30:00.123"
}
```

## 3.2 确认任务

`POST /api/agent/tasks/{task_id}/confirm`

说明:

1. 用户确认结构化任务。
2. 低中风险任务确认后可进入执行。
3. 高风险任务确认后进入审批。

请求示例:

```json
{
  "confirmed": true,
  "comment": "确认执行"
}
```

响应示例:

```json
{
  "request_id": "req-002",
  "success": true,
  "code": "OK",
  "message": "task confirmed",
  "data": {
    "task_id": "task-20260408-001",
    "task_status": "RUNNING",
    "approval_status": "NOT_REQUIRED"
  },
  "timestamp": "2026-04-08 14:31:00.123"
}
```

## 3.3 查询任务详情

`GET /api/agent/tasks/{task_id}`

响应示例:

```json
{
  "request_id": "req-003",
  "success": true,
  "code": "OK",
  "message": "success",
  "data": {
    "task_id": "task-20260408-001",
    "task_status": "VERIFYING",
    "approval_status": "NOT_REQUIRED",
    "risk_level": "MEDIUM",
    "intent": {
      "action_type": "DEPLOY",
      "app_code": "order-service",
      "env": "test",
      "version": "1.2.3"
    },
    "tool_calls": [
      {
        "tool_name": "deploy_package",
        "success": true
      }
    ],
    "verification_result": {
      "process_ok": true,
      "port_ok": true,
      "http_ok": true,
      "log_error_count": 0
    },
    "summary": "部署成功,自动验证通过"
  },
  "timestamp": "2026-04-08 14:35:00.123"
}
```

## 3.4 查询任务报告

`GET /api/agent/tasks/{task_id}/report`

说明:

返回完整执行报告,适合前端展示和审计导出。

响应 `data` 建议包含:

1. `task_basic`
2. `intent_snapshot`
3. `approval_trace`
4. `tool_trace`
5. `verification_trace`
6. `result_summary`
7. `audit_trace`

## 3.5 取消任务

`POST /api/agent/tasks/{task_id}/cancel`

说明:

1. 仅允许取消未完成任务。
2. 已经进入软件 A 执行阶段时,需要根据执行状态判断是否支持取消。

---

## 4. 云端与本地 Agent 交互接口

## 4.1 Edge 心跳

`POST /api/agent/edge/heartbeat`

请求示例:

```json
{
  "edge_id": "edge-shanghai-001",
  "hostname": "customer-host-01",
  "os_type": "WINDOWS",
  "agent_version": "0.1.0",
  "capabilities": [
    "check_process",
    "check_port",
    "http_health_check",
    "grep_log",
    "service_control_windows"
  ]
}
```

## 4.2 Edge 拉取任务

`POST /api/agent/edge/tasks/pull`

请求示例:

```json
{
  "edge_id": "edge-shanghai-001",
  "max_tasks": 5
}
```

响应示例:

```json
{
  "request_id": "req-101",
  "success": true,
  "code": "OK",
  "message": "success",
  "data": {
    "tasks": [
      {
        "task_id": "task-20260408-001",
        "step_id": "step-verify-01",
        "tool_name": "http_health_check",
        "params": {
          "url": "http://10.0.0.12:8080/actuator/health",
          "timeout_ms": 3000
        },
        "expire_at": "2026-04-08 14:40:00.123"
      }
    ]
  },
  "timestamp": "2026-04-08 14:35:10.123"
}
```

## 4.3 Edge 回传执行结果

`POST /api/agent/edge/tasks/report`

请求示例:

```json
{
  "edge_id": "edge-shanghai-001",
  "task_id": "task-20260408-001",
  "step_id": "step-verify-01",
  "tool_name": "http_health_check",
  "success": true,
  "code": "OK",
  "message": "200 OK",
  "data": {
    "status_code": 200,
    "latency_ms": 45
  },
  "evidence": {
    "response_body": "{\"status\":\"UP\"}"
  },
  "started_at": "2026-04-08 14:35:11.123",
  "finished_at": "2026-04-08 14:35:11.456"
}
```

## 4.4 Edge 上报异常

`POST /api/agent/edge/events`

说明:

用于上报:

1. 本地 Agent 异常。
2. 工具不可用。
3. 证书异常。
4. 系统资源异常。

---

## 5. 软件 A Demo 接口

## 5.1 设计说明

软件 A demo 版本用于支撑 MVP 闭环,其接口语义需尽量贴近未来真实软件 A 的标准能力。

建议 base path:

`/api/demo/software-a`

## 5.2 创建部署任务

`POST /api/demo/software-a/deploy-tasks`

请求示例:

```json
{
  "operator": {
    "user_id": "u1001",
    "user_name": "alice"
  },
  "tenant_id": "tenant-demo",
  "app_code": "order-service",
  "env": "test",
  "version": "1.2.3",
  "target_nodes": [
    "10.0.0.12",
    "10.0.0.13"
  ],
  "deploy_options": {
    "graceful": true
  }
}
```

响应示例:

```json
{
  "request_id": "req-sa-001",
  "success": true,
  "code": "OK",
  "message": "deploy task created",
  "data": {
    "software_a_task_id": "sa-task-001",
    "task_status": "RUNNING"
  },
  "timestamp": "2026-04-08 14:32:00.123"
}
```

## 5.3 查询部署任务状态

`GET /api/demo/software-a/deploy-tasks/{software_a_task_id}`

响应 `data` 建议包含:

1. `software_a_task_id`
2. `task_status`
3. `progress_percent`
4. `app_code`
5. `env`
6. `version`
7. `target_nodes`
8. `started_at`
9. `finished_at`
10. `error_detail`

## 5.4 推送配置

`POST /api/demo/software-a/config/push`

请求示例:

```json
{
  "operator": {
    "user_id": "u1001",
    "user_name": "alice"
  },
  "app_code": "order-service",
  "env": "test",
  "config_template": "default-v1",
  "config_version": "20260408-01",
  "target_nodes": [
    "10.0.0.12"
  ]
}
```

## 5.5 服务控制

### 5.5.1 启动服务

`POST /api/demo/software-a/services/start`

### 5.5.2 停止服务

`POST /api/demo/software-a/services/stop`

### 5.5.3 重启服务

`POST /api/demo/software-a/services/restart`

统一请求示例:

```json
{
  "operator": {
    "user_id": "u1001",
    "user_name": "alice"
  },
  "app_code": "order-service",
  "env": "test",
  "target_nodes": [
    "10.0.0.12"
  ]
}
```

## 5.6 查询日志

`POST /api/demo/software-a/logs/search`

请求示例:

```json
{
  "app_code": "order-service",
  "env": "test",
  "time_range": {
    "start_at": "2026-04-08 14:20:00.123",
    "end_at": "2026-04-08 14:30:00.123"
  },
  "keywords": [
    "ERROR",
    "Exception"
  ],
  "limit": 100
}
```

响应 `data` 建议包含:

1. `total_count`
2. `entries`
3. `summary`

`entries` 单条建议字段:

1. `timestamp`
2. `level`
3. `host`
4. `message`

## 5.7 查询指标

`POST /api/demo/software-a/metrics/query`

请求示例:

```json
{
  "app_code": "order-service",
  "env": "test",
  "metric_names": [
    "cpu_usage",
    "memory_usage",
    "http_5xx_count"
  ],
  "time_range": {
    "start_at": "2026-04-08 14:20:00.123",
    "end_at": "2026-04-08 14:30:00.123"
  }
}
```

## 5.8 查询应用拓扑

`GET /api/demo/software-a/apps/{app_code}/topology?env=test`

## 5.9 权限校验

`POST /api/demo/software-a/permissions/check`

请求示例:

```json
{
  "operator": {
    "user_id": "u1001",
    "user_name": "alice"
  },
  "action_type": "DEPLOY",
  "app_code": "order-service",
  "env": "test"
}
```

响应示例:

```json
{
  "request_id": "req-sa-009",
  "success": true,
  "code": "OK",
  "message": "success",
  "data": {
    "allowed": true,
    "reason": ""
  },
  "timestamp": "2026-04-08 14:31:00.123"
}
```

---

## 6. 身份 Demo 接口

## 6.1 设计说明

身份 demo 用于 MVP 阶段闭环,不要求完全模拟现网身份系统,但必须支持:

1. 登录。
2. 用户信息查询。
3. 角色信息查询。
4. 基础权限集合返回。

建议 base path:

`/api/demo/identity`

## 6.2 登录

`POST /api/demo/identity/login`

请求示例:

```json
{
  "username": "alice",
  "password": "demo-password"
}
```

响应示例:

```json
{
  "request_id": "req-id-001",
  "success": true,
  "code": "OK",
  "message": "login success",
  "data": {
    "access_token": "demo-token-alice",
    "expires_in_seconds": 7200,
    "user": {
      "user_id": "u1001",
      "user_name": "alice",
      "display_name": "Alice",
      "roles": [
        "DEPLOY_OPERATOR"
      ],
      "tenant_id": "tenant-demo"
    }
  },
  "timestamp": "2026-04-08 14:00:00.123"
}
```

## 6.3 获取当前用户信息

`GET /api/demo/identity/me`

## 6.4 查询用户权限

`GET /api/demo/identity/users/{user_id}/permissions`

响应 `data` 建议包含:

1. `user_id`
2. `roles`
3. `permissions`
4. `allowed_envs`
5. `allowed_apps`

## 6.5 验证 Token

`POST /api/demo/identity/token/introspect`

---

## 7. 审批 Demo 接口

## 7.1 设计说明

审批 demo 用于高风险动作闭环,至少支持:

1. 创建审批单。
2. 查询审批单。
3. 通过或驳回审批。
4. 审批记录留痕。

建议 base path:

`/api/demo/approval`

## 7.2 创建审批单

`POST /api/demo/approval/requests`

请求示例:

```json
{
  "task_id": "task-20260408-888",
  "risk_level": "HIGH",
  "operator": {
    "user_id": "u1001",
    "user_name": "alice"
  },
  "action_type": "RESTART_SERVICE",
  "target": {
    "app_code": "user-service",
    "env": "prod"
  },
  "reason": "生产故障恢复",
  "approvers": [
    "u2001"
  ]
}
```

响应示例:

```json
{
  "request_id": "req-ap-001",
  "success": true,
  "code": "OK",
  "message": "approval created",
  "data": {
    "approval_id": "ap-20260408-001",
    "approval_status": "PENDING"
  },
  "timestamp": "2026-04-08 14:40:00.123"
}
```

## 7.3 查询审批单

`GET /api/demo/approval/requests/{approval_id}`

## 7.4 审批决策

`POST /api/demo/approval/requests/{approval_id}/decision`

请求示例:

```json
{
  "decision": "APPROVED",
  "comment": "同意执行",
  "operator": {
    "user_id": "u2001",
    "user_name": "bob"
  }
}
```

`decision` 可选值:

```json
["APPROVED", "REJECTED"]
```

## 7.5 查询待审批列表

`GET /api/demo/approval/requests?approval_status=PENDING&approver_user_id=u2001`

---

## 8. 建议的内部对象结构

## 8.1 Task 对象

```json
{
  "task_id": "task-20260408-001",
  "session_id": "sess-001",
  "tenant_id": "tenant-demo",
  "operator": {
    "user_id": "u1001",
    "user_name": "alice"
  },
  "action_type": "DEPLOY",
  "app_code": "order-service",
  "env": "test",
  "version": "1.2.3",
  "target_nodes": [
    "10.0.0.12"
  ],
  "risk_level": "MEDIUM",
  "approval_status": "NOT_REQUIRED",
  "task_status": "RUNNING"
}
```

## 8.2 ToolCall 对象

```json
{
  "tool_call_id": "tool-call-001",
  "task_id": "task-20260408-001",
  "tool_name": "deploy_package",
  "request_payload": {},
  "response_payload": {},
  "success": true,
  "duration_ms": 1200,
  "started_at": "2026-04-08 14:31:00.123",
  "finished_at": "2026-04-08 14:31:01.456"
}
```

## 8.3 Approval 对象

```json
{
  "approval_id": "ap-20260408-001",
  "task_id": "task-20260408-888",
  "approval_status": "PENDING",
  "approvers": [
    "u2001"
  ],
  "decision_logs": []
}
```

---

## 9. 典型时序

## 9.1 部署时序

1. 用户调用 `POST /api/agent/tasks` 发起自然语言请求。
2. Agent 完成解析并返回 `task_id` 和结构化结果。
3. 用户调用确认接口。
4. Agent 调用身份 demo 获取操作者信息和权限。
5. Agent 调用软件 A demo 权限校验。
6. Agent 调用软件 A demo 创建部署任务。
7. Agent 轮询软件 A demo 查询状态。
8. Agent 调用 Edge 接口执行本地验证。
9. Agent 汇总结果,更新任务状态并生成报告。

## 9.2 高风险审批时序

1. 用户发起高风险任务。
2. Agent 判定需要审批。
3. Agent 调用审批 demo 创建审批单。
4. 审批人完成审批。
5. Agent 检查审批结果。
6. 审批通过后进入执行。

---

## 10. demo 与正式系统的替换原则

1. Agent 上层只依赖统一语义接口,不直接依赖 demo 接口字段差异。
2. 软件 A demo、身份 demo、审批 demo 均应封装在适配层后面。
3. 后续替换真实系统时,优先保持上层对象模型不变。
4. 如真实系统能力不足,应在适配层内做降级,而不是修改编排主链路。

---

## 11. 推荐开发顺序

1. 先完成通用响应格式、错误码和枚举定义。
2. 再完成 Agent 对外任务接口。
3. 再完成软件 A demo 接口。
4. 再完成身份 demo 和审批 demo。
5. 最后完成本地 Agent 拉取任务与结果回传接口。

这样可以最短路径打通 MVP 主链路。
