重构项目心跳数据结构为Redis LIST,更新相关文档和OpenSpec规范。主要变更包括: - 将项目心跳从STRING改为LIST类型 - 更新后端服务以支持LIST操作 - 同步更新文档和OpenSpec规范 - 统一后端端口为3001 - 添加部署指南和Windows部署文档 修复前端API请求路径,移除硬编码的localhost地址。添加PM2和Nginx配置文件模板,完善部署流程文档。更新Redis集成协议文档,明确LIST数据结构和外部项目对接规范。
3.9 KiB
3.9 KiB
Command Capability Specification
Overview
This specification defines the command capability for the BLS Project Console, which allows users to send console commands to target project HTTP APIs.
Requirements
Requirement: Command Sending to Redis
The system SHALL send commands to a target project's HTTP API.
Scenario: Sending a command to target project API
- WHEN the user enters a command in the console
- AND clicks the "Send" button
- THEN the backend SHALL resolve
apiBaseUrlfrom the project's heartbeat - AND it SHALL call
POST {apiBaseUrl}/{apiName}with a structured payload - AND the user SHALL receive a success confirmation if upstream returns 2xx
Requirement: Command Validation
The system SHALL validate commands before sending them to target project API.
Scenario: Validating an empty command
- WHEN the user tries to send an empty command
- THEN the system SHALL display an error message
- AND the command SHALL NOT be sent
Scenario: Validating a command with invalid characters
- WHEN the user tries to send a command with invalid characters
- THEN the system SHALL display an error message
- AND the command SHALL NOT be sent
Requirement: Command History
The system SHALL maintain a history of sent commands in the console UI.
Scenario: Viewing command history
- WHEN the user opens the command history
- THEN the system SHALL display a list of previously sent commands
- AND the user SHALL be able to select a command from the history to resend
Requirement: Command Response Handling
The system SHALL handle responses from commands sent to target project API.
Scenario: Receiving a command response
- WHEN the target project API responds
- THEN the system SHALL display the response status in the console
Data Model
Command
{
"id": "string",
"content": "string",
"timestamp": "ISO-8601 string",
"status": "string" // e.g., sent, processing, completed, failed
}
Command Response
{
"id": "string",
"commandId": "string",
"timestamp": "ISO-8601 string",
"status": "string", // e.g., success, failure
"result": "string" // command execution result
}
API Endpoints
POST /api/commands
- Description: Send a command to a project's API endpoint
- Request Body:
{ "targetProjectName": "string", "command": "string" } - Response:
{ "success": true, "message": "已调用目标项目 API", "commandId": "string", "targetUrl": "string", "upstreamStatus": 200, "upstreamData": "object" }
GET /api/projects
- Description: Get list of all projects with their heartbeat status
- Response:
{ "success": true, "projects": [ { "id": "string", "name": "string", "apiBaseUrl": "string", "lastActiveAt": "number", "status": "online|offline|unknown", "isOnline": "boolean", "ageMs": "number" } ], "count": 10 }
POST /api/projects/migrate
- Description: Migrate heartbeat data from old structure to new unified structure
- Request Body:
{ "deleteOldKeys": false, "dryRun": false } - Response:
{ "success": true, "message": "数据迁移完成", "migrated": 5, "projects": [...], "listKey": "项目心跳", "deleteOldKeys": false }
GET /api/commands/history
- Description: Get command history (deprecated - use project logs instead)
- Query Parameters:
limit: Maximum number of commands to return (default: 50)offset: Offset for pagination (default: 0)
- Response: Array of command objects
GET /api/commands/:id/response
- Description: Get response for a specific command (deprecated - use project logs instead)
- Response: Command response object