yao/agent/robot/api/README.md
Max add933d34c Refactor Job System Integration to Execution Storage
- Removed the job system integration from the robot execution flow, transitioning to a dedicated ExecutionStore for managing execution records.
- Updated the design documentation to reflect the new architecture, emphasizing the relationship between robots and concurrent executions.
- Revised the API to return execution IDs instead of job IDs, ensuring clarity in execution tracking.
- Enhanced logging mechanisms to utilize the kun/log package for better traceability of execution phases.
- Updated tests and documentation to align with the removal of job-related structures and the introduction of execution management.
2026-01-22 18:24:50 +08:00

194 lines
5.4 KiB
Markdown

# Robot Agent Go API
Go API for managing autonomous robot agents.
## Quick Start
```go
import "github.com/yaoapp/yao/agent/robot/api"
// Start system
api.Start()
defer api.Stop()
// Trigger execution
result, _ := api.Trigger(ctx, "member_123", &api.TriggerRequest{
Type: types.TriggerHuman,
Action: types.ActionTaskAdd,
Messages: []agentcontext.Message{{Role: "user", Content: "Analyze sales"}},
})
// Check status
exec, _ := api.GetExecution(ctx, result.ExecutionID)
```
## Lifecycle
```go
api.Start() // Start with defaults
api.StartWithConfig(config) // Start with custom config
api.Stop() // Graceful shutdown
api.IsRunning() // Check if running
```
## Robot Query
```go
// Get single robot
robot, err := api.GetRobot(ctx, "member_123")
// List robots with filters
result, err := api.ListRobots(ctx, &api.ListQuery{
TeamID: "team_1",
Status: types.RobotIdle,
Keywords: "sales",
ClockMode: types.ClockInterval,
Page: 1,
PageSize: 20,
Order: "created_at desc",
})
// Get runtime status
state, err := api.GetRobotStatus(ctx, "member_123")
// state.Running, state.MaxRunning, state.RunningIDs, state.LastRun, state.NextRun
```
## Triggers
### Human Intervention
```go
result, err := api.Trigger(ctx, "member_123", &api.TriggerRequest{
Type: types.TriggerHuman,
Action: types.ActionTaskAdd,
Messages: []agentcontext.Message{
{Role: "user", Content: "Generate weekly report"},
},
})
// Or use shorthand:
result, err := api.Intervene(ctx, "member_123", req)
```
### Event Trigger
```go
result, err := api.Trigger(ctx, "member_123", &api.TriggerRequest{
Type: types.TriggerEvent,
Source: types.EventWebhook,
EventType: "order.created",
Data: map[string]interface{}{"order_id": "12345"},
})
// Or use shorthand:
result, err := api.HandleEvent(ctx, "member_123", req)
```
### Manual Trigger (Testing)
```go
result, err := api.TriggerManual(ctx, "member_123", types.TriggerClock, nil)
```
## Execution Management
```go
// Get execution by ID
exec, err := api.GetExecution(ctx, "exec_abc123")
// List executions with filters
result, err := api.ListExecutions(ctx, "member_123", &api.ExecutionQuery{
Status: types.ExecRunning,
Trigger: types.TriggerClock,
Page: 1,
PageSize: 10,
})
// Get execution with runtime status
exec, err := api.GetExecutionStatus(ctx, "exec_abc123")
// Control execution
api.PauseExecution(ctx, "exec_abc123")
api.ResumeExecution(ctx, "exec_abc123")
api.StopExecution(ctx, "exec_abc123")
```
## Types
### ListQuery
```go
type ListQuery struct {
TeamID string // Filter by team
Status types.RobotStatus // Filter by status (idle|working|paused|error)
Keywords string // Search in display_name
ClockMode types.ClockMode // Filter by clock mode (times|interval|daemon)
Page int // Page number (default: 1)
PageSize int // Page size (default: 20, max: 100)
Order string // Order by column (default: "created_at desc")
}
```
### TriggerRequest
```go
type TriggerRequest struct {
Type types.TriggerType // human | event | clock
Action types.InterventionAction // task.add, goal.adjust, etc.
Messages []agentcontext.Message // User input
PlanAt *time.Time // Schedule for later
InsertPosition InsertPosition // first | last | next | at
AtIndex int // When InsertPosition = "at"
Source types.EventSource // webhook | database
EventType string // Event name
Data map[string]interface{} // Event payload
ExecutorMode types.ExecutorMode // standard | dryrun | sandbox
}
```
### TriggerResult
```go
type TriggerResult struct {
Accepted bool // Whether trigger was accepted
Queued bool // Whether queued (vs immediate)
Execution *types.Execution // Execution details
ExecutionID string // Execution ID for tracking
Message string // Status message
}
```
### ExecutionQuery
```go
type ExecutionQuery struct {
Status types.ExecStatus // Filter by status
Trigger types.TriggerType // Filter by trigger type
Page int // Page number (default: 1)
PageSize int // Page size (default: 20, max: 100)
}
```
### RobotState
```go
type RobotState struct {
MemberID string // Robot member ID
TeamID string // Team ID
DisplayName string // Display name
Status types.RobotStatus // idle | working | paused | error
Running int // Current running count
MaxRunning int // Max concurrent limit
LastRun *time.Time // Last execution time
NextRun *time.Time // Next scheduled time
RunningIDs []string // IDs of running executions
}
```
## Files
| File | Functions |
|------|-----------|
| `lifecycle.go` | `Start`, `StartWithConfig`, `Stop`, `IsRunning` |
| `robot.go` | `GetRobot`, `ListRobots`, `GetRobotStatus` |
| `trigger.go` | `Trigger`, `TriggerManual`, `Intervene`, `HandleEvent` |
| `execution.go` | `GetExecution`, `ListExecutions`, `GetExecutionStatus`, `PauseExecution`, `ResumeExecution`, `StopExecution` |
| `types.go` | Type definitions |